15
サブプロセスコマンドからのライブ出力
流体力学コードのドライバーとしてpythonスクリプトを使用しています。シミュレーションを実行するときが来たらsubprocess.Popen、コードを実行し、stdoutとstderrからの出力を収集してsubprocess.PIPE---次に、出力情報を印刷(およびログファイルに保存)して、エラーをチェックします。問題は、コードの進行状況がわからないことです。コマンドラインから直接実行すると、その反復、時間、次のタイムステップなどについての出力が得られます。 (ロギングとエラーチェックのために)出力を保存し、ライブストリーミング出力を生成する方法はありますか? 私のコードの関連セクション: ret_val = subprocess.Popen( run_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True ) output, errors = ret_val.communicate() log_file.write(output) print output if( ret_val.returncode ): print "RUN failed\n\n%s\n\n" % (errors) success = False if( errors ): log_file.write("\n\n%s\n\n" % errors) もともと私はパイプをrun_command介しteeてパイプしていたため、コピーは直接ログファイルに送られ、ストリームは依然として端末に直接出力されていましたが、その方法では(私の知識に対して)エラーを格納できません。 編集: 一時的な解決策: ret_val = subprocess.Popen( run_command, stdout=log_file, stderr=subprocess.PIPE, shell=True ) while not ret_val.poll(): log_file.flush() …