スクリプトでは、いくつかのコマンドラインパラメータを "-a"として実行したいですか?.exeの出力をpythonでファイルにリダイレクトする方法は?
プログラムの標準出力をファイルにリダイレクトしますか?
どうすれば実装できますか?
スクリプトでは、いくつかのコマンドラインパラメータを "-a"として実行したいですか?.exeの出力をpythonでファイルにリダイレクトする方法は?
プログラムの標準出力をファイルにリダイレクトしますか?
どうすれば実装できますか?
あなたがサブプロセスを使用してファイルに直接リダイレクトすることができます。
3)が戻ってデフォルトに標準出力をリダイレクトすることを忘れないでください。
import subprocess
with open('output.txt', 'w') as output_f:
p = subprocess.Popen('Text/to/execute with-arg',
stdout=output_f,
stderr=output_f)
最も簡単なのはos.system("the.exe -a >thefile.txt")
ですが、標準ライブラリのsubprocess
モジュールなど、他の多くの方法があります。
このようなことができます。 あなたが標準エラー出力に対して同様のことを行うことができます
p = subprocess.Popen(["ls","-l"],stdout=subprocess.PIPE)
print p.stdout.read() # or put it in a file
のls -lの出力(または他のコマンド)を読むために/ STDIN
が、アレックスは、ファイルにあなたはそれをしたい場合に述べたように、単にCMDをリダイレクト
ファイルに出力する長期間実行されるプロセスの場合は、stdout.read()がブロックされていることに注意してください。スクリプトが何か他のことを続行する場合や、出力 'live'に応答する場合は、別のスレッドでサブプロセスを実行する必要があります。 – mavnn
実行ファイルを実行して結果を待っているだけなら、おそらくAnuragの解決策が最適です。私はそれが到着したときに各出力行に応答する必要があり、次のことがわかった:
1)書き込み(テキスト)メソッドでオブジェクトを作成する。 stdoutをそれにリダイレクトします(sys.stdout = obj)。 writeメソッドでは、到着時の出力を処理します。
2)は、次のコードのようなものを持つ別々のスレッドでメソッドを実行します。あなたが標準出力をリダイレクトしてきたので
p = subprocess.Popen('Text/to/execute with-arg', stdout=subprocess.PIPE,
stderr=subprocess.PIPE, shell=False)
while p.poll() is None:
print p.stdout.readline().strip()
、PIPEはラインであなたのwriteメソッドラインに出力を送信します。あなたが改行を取ると確信していないなら、読み(量)もうまくいく、と私は信じている。 = sys.stdoutの__sys.stdout__
タイトル(.exe)はWindowsで問題があるようですが、 Python 2.7のMac OS X(10.8)では、受け入れられた答え(stdout/stderr引数を使ったsubprocess.Popen())がうまくいきませんでした。
私はそれを動作させるためにsubprocess.check_output()(Python 2.7以上)を使用しなければなりませんでした。例:
import subprocess
cmd = 'ls -l'
out = subprocess.check_output(cmd, shell=True)
with open('my.log', 'w') as f:
f.writelines(out)
f.close()
このソリューションでは、プログラムの終了時にすべての累積出力が書き込まれます。 実行中にログファイルを監視する場合。あなたは何か他のものを試してみるとよいでしょう。 私自身のケースでは、私は最終結果を気にしていました。
どのようにそのサブプロセスを使用しますか? – Kim
http://docs.python.org/library/subprocess.html#replacing-os-systemをご覧ください。 –
os.systemを使用してリダイレクトしようとすると、オペレーティングシステム間でパイプ記号が異なることを忘れないでください。 – mavnn