複雑なスクリプトの開発中に問題が発生し、数行で再現しました。
import os
i=2
content_pbs = "test"
os.popen('if [ -d f_bf_'+str(i)+' ]; then rm -rf f_bf_'+str(i)+\
'; fi; mkdir f_bf_'+str(i)+';')
#Write to a file
f = open('f_bf_'+str(i)+'/my_pbs', 'w')
f.write(content_pbs)
f.close()
エラーは次のとおりです。
Traceback (most recent call last):
File "test.py", line 7, in <module>
f = open('f_bf_'+str(i)+'/my_pbs', 'w')
FileNotFoundError: [Errno 2] No such file or directory: 'f_bf_2/my_pbs'
にpopen
置き換えるとsystem
、エラーは表示されず、ファイルは正しく書き込まれます。またはf = open('my_pbs', 'w')
、保持しながら変更するだけpopen
で、エラーは発生せず、ファイルは良好に見えます。2.7.10で元のコードを実行すると、すべて問題ありません。私の質問は、元のスクリプトの何が問題になっているのかということです。参考までに、私はpython3.6.4を使用しています。多分それはバージョン3.6.4のバグです。
現在推奨されているsubprocess.Popen(https://docs.python.org/3.6/library/subprocess.html)を使用することをお勧めします。たとえば、次のようになります。
def rnsystem (cmd, showoutput=True):
p = subprocess.Popen(cmd, stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True,
shell=True)
(out, err) = p.communicate()
ret = p.wait()
out = out.split('\n')
err = err.split('\n')
ret_tf = True if ret == 0 else False
if showoutput:
if ret_tf:
for o in out:
print(o)
else:
for e in err:
print(e)
return {'output': out, 'error': err, 'status': ret, 'status_tf': ret_tf}
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加