子进程命令的实时输出我使用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 outputif( ret_val.returncode ):
print "RUN failed\n\n%s\n\n" % (errors)
success = Falseif( 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()然后,在另一个终端运行tail -f log.txt(第二节)log_file = 'log.txt').
3 回答
忽然笑
TA贡献1806条经验 获得超5个赞
import subprocessimport sys process = subprocess.Popen(your_command, stdout=subprocess.PIPE)for line in process.stdout: sys.stdout.write(line)
添加回答
举报
0/150
提交
取消