为了账号安全,请及时绑定邮箱和手机立即绑定

子进程命令的实时输出

子进程命令的实时输出

守着星空守着你 2019-10-13 12:04:04
子进程命令的实时输出我使用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个赞

我们还可以使用默认的文件迭代器来读取stdout,而不是使用带有readline()的ITER构造。

import subprocessimport sys
process = subprocess.Popen(your_command, stdout=subprocess.PIPE)for line in process.stdout:
    sys.stdout.write(line)


查看完整回答
反对 回复 2019-10-14
  • 3 回答
  • 0 关注
  • 305 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信