【问题标题】:Python, Get status from running commandPython,从运行命令获取状态
【发布时间】:2016-03-18 01:49:29
【问题描述】:

我正在运行自己的脚本来启动 HandBrakeCLI。 HandBrake 需要几个小时才能完成工作。

我打算从cron启动这个脚本,所以脚本不会有真正的输出(我可以不时更新一个文件。)

HandBrake 可以告诉我它在运行时在终端的底线在做什么。

我正在使用 Popen 启动手刹。

如何在手刹运行时查看其输出以实时(接近实时)收集其状态?

这是我正在使用的命令:

command = ['HandBrakeCLI', '-i', long_source, '-o', long_target, '-f', 'mp4'] # + a bunch more
p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
out, err = p.communicate()
print out
print err

这可行,但我希望在执行期间从Popen 输出,而不是等到它完成后。

谢谢,马克。

PS。 Ubuntu 服务器 12.04

【问题讨论】:

  • 你试过什么?在我看来,subprocess.Popen 将是完全正确的方法,所以如果没有看到错误消息,我不知道你为什么不能这样做。
  • 这是我正在使用的命令:p = subprocess.Popen(['HandBrakeCLI', '-i', long_source, '-o', long_target, '-f', 'mp4'..a bunch more ], stdout=subprocess.PIPE, stderr=subprocess.PIPE)out, err = p.communicate()print outprint err
  • 这行得通,但我想要 Popen 在执行期间的输出,而不是等到它完成之后。此评论部分的格式无效。
  • 不要将代码放入 cmets,edit 你的问题。
  • 如果您将stdout=PIPE 和stderr=PIPE 和tail -F 删除到您的Python 进程输出所在的文件会怎样?

标签: python-2.7 popen


【解决方案1】:

您可以使用Popen() 启动子进程而不是.communicate(),然后定期逐行检查其stdout 和stderr:

sp = subprocess.Popen( command, shell=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE )

# later....
while continueMyEventLoop:
    out = sp.stdout.readline()
    err = sp.stderr.readline()

    DealWith( out, err )
    DoOtherStuff()

【讨论】:

    【解决方案2】:

    您可以将 cron 的输出定向到某个文件并引用该文件。

    【讨论】:

      猜你喜欢
      • 2012-02-15
      • 2011-10-25
      • 2010-10-22
      • 1970-01-01
      • 2011-05-21
      • 1970-01-01
      • 2014-11-20
      • 2018-07-30
      • 2016-01-03
      相关资源
      最近更新 更多