2016-04-19 15 views
1

外部プログラムをPythonから実行し、出力(たくさんのテキスト)をログファイルにリダイレクトして、そのプログラムが終了するのを待ちます。python:外部プログラムを実行して出力をファイルに出力し、終了を待つ

#! /bin/bash 
my_external_program > log_file 2>&1 
echo "done" 

しかし、どうすれば同じことを行うことができますか? bashコマンドでは、プログラムの実行中にlog_fileを確認できます。私はこのプロパティをPythonでも望みます。

答えて

1

Controlling a python script from another script

あなたはそれが実際に同様の問題である、上記のリンクを確認することができます。サブプロセスまたはos.popenからPopenを使用すると、リアルタイムでチェックすることができます。

単純なos.system( "あなたのスクリプト> /tmp/mickey.log")もスクリプトを実行しますが、前にコマンドの実行を待機します。

問題が解決するかどうかお知らせください。

+0

? _os.system( "my_script&> my_log")を試してみると、ログファイルは作成されませんが、すべてがPythonターミナルに投げ込まれます。 –

+1

bashスクリプトでは、2>&1を使用するとsterrがstdoutにリダイレクトされ、自分のログに送信されます。だから例えば:script.py 2>&1> mickey.log私はこれがあなたのクエリを解決すると思います:-) –

2

subprocessモジュールを参照してください。 exampleについては

:私もログファイルにstderrをリダイレクトするにはどうすればよい

with open("log_file", "w") as log_file: 
    subprocess.run(["my_external_program"], stdout=log_file, stderr=log_file) 
print("done") 
+0

+1。 Pythonのサブプロセスとの素晴らしい解決策ですが、私は@Marcoソリューションを選択します。これは短くて(os.systemは廃止されていると言われていますが)。 –

+1

os.system()の主な問題はセキュリティです。 'subprocess.run( '...'、shell = True)'と冗長になりました。渡された文字列は、解釈するためにシェルに渡されます。 (したがって、あなたが投稿したbashスクリプトとまったく同じです。)大丈夫かもしれない文字列全体をハードコードしていますが、文字列を作成するためのどこかのデータを取得した場合は、意図しないコードを実行する可能性があります。 (ちょうど参考) – dsh

関連する問題