1

os.system() を使用して Python プログラムを実行し、その出力をファイルに記録しようとしています。これはうまくいきます。

os.system("myprogram.py -arg1 -arg2 > outputfile.txt")
#something here to kill/cleanup whatever is left from os.system()
#read outputfile1.txt- this output file got all the data I needed from os.system()

問題は、myprogram.py が別の python プログラムを呼び出して、必要な出力が得られるが終了しないことです。下の図のように、プロンプトが異なることもわかります。

ここに画像の説明を入力

os.system("quit()") と subprocess.popen("quit()", shell=False) を使用して試したプログラムの次の行に到達したときに子プロセスを強制終了する方法はありますか何もしないでください。

exit() は実際には使用できません。これは、python をまとめて殺すだけだからです。

ところで、これは失速します

f=subprocess.Popen("myprogram.py -arg1 > outputfile.txt") and then 
f.communicate() #this just stalls because the child program does not end. 
4

1 に答える 1

1

によって呼び出されているプログラムによってmyprogram.py、python プロンプトが表示されます。コードを提示しない限り、なぜそうなるのかはわかりません。

モジュールを使用するsubprocess(より用途が広い) 方が、 を使用するよりも推奨されos.systemます。

しかし、サブプロセスを正しく使用していません。次のようにしてみてください。

with open('outputfile.txt', 'w+') as outf:
    rc = subprocess.call(['python', 'myprogram.py', '-arg1'], stdout=outf)

withステートメントは、完了するとファイルを閉じますsubprocess.call。プログラムとその引数は、文字列のリストとして指定する必要があります。リダイレクトは、std...引数を使用して実現されます。

終了後myprogram.pyrcそのリターン コードが含まれます。

プログラムの出力をキャプチャしたい場合は、subprocess.check_output()代わりに使用してください。

于 2013-03-28T23:40:41.403 に答える