使用subprocess.run()
あなたfreefem ++プログラムを呼び出し、それが存在する前に、あなたの呼び出しは、実際にファイルを生成していることを確認します。 open
の直前にブレークポイントを追加することで確認できます。
ので、サブプロセスに変更します。
def f(x):
cp = subprocess.run(['freefem++', '--argument', '--other_argument'])
if cp.returncode != 0:
print('Oops… failure running freefem++!')
sys.exit(cp.returncode) # actually you should be raising an exception as you're in a function
if not os.path.exists('out.txt'):
print('Oops… freefem++ failed to create the file!')
sys.exit(1) # same you'd better be raising an exception as you're in a function
with open('out.txt', 'r') as ff_out:
return ff_out # it is better to return the file object so you can iterate over it
ファイルが実際にそれを開く前に作成されていることを確認するには:あなたはfreefemことを確認するために
def f(x):
cp = subprocess.run(['freefem++', '--argument', '--other_argument'])
if cp.returncode != 0:
print('Oops… failure running freefem++!')
sys.exit(cp.returncode)
# XXX Here we make a breakpoint, when it's stopping open a shell and check for the file!
# if you do not find the file at this point, then your freefem++ call is buggy and your issue is not in the python code, but in the freefem++ code.
import pdb;pdb.set_trace()
with open('out.txt', 'r') as ff_out:
return ff_out # it is better to return the file object so you can iterate over it
最後に、最もエレガントな解決策は次のようになり++プログラムはすべてを標準出力に出力し、その出力をPython内のパイプを通して、subprocess.popen()
:
def f(x):
p = subprocess.popen(['freefem++'…], stdout=subprocess.PIPE)
out, _ = p.communicate()
if p.returncode != 0:
raise Exception('Oops, freefem++ failed!')
return out
出典
2016-06-25 11:09:28
zmo
'os.system'はかなり粗雑です。 [サブプロセス](https://docs.python.org/3/library/subprocess.html#module-subprocess)それは学習曲線のビットを持っているが、あなたはより多くの制御を_far_できます。 –
ファイルがスクリプトと同じフォルダに保存されていますか? – zondo
あなたのお返事ありがとうございます。実際に私のテキストファイルは次の形式になっています(パラメータが無ければ正常です) – Mohammad