我正在使用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)
最初,我是通过tee
管道run_command
,以便副本直接到日志文件,流仍然直接输出到终端——但这样我就不能存储任何错误(据我所知)。
目前我的临时解决方案是:
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
(s.t log_file = 'log.txt'
)。