2015-12-12 58 views
2

我正在运行我自己的脚本来启动HandBrakeCLI。 HandBrake需要几个小时来完成它的工作。Python,从运行命令获取状态

我打算从cron启动此脚本,所以会出现从脚本没有真正的输出(我可以随时更新文件时间。)

手刹能告诉我它是什么在底部做终端在运行时的线路。

我正在使用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

+0

你尝试过什么?在我看来,'subprocess.Popen'完全是正确的方法,所以没有看到错误信息,我不知道为什么你不能这样做。 – jez

+0

这里是我正在使用的命令:'p = subprocess.Popen(['HandBrakeCLI','-i',long_source,'-o',long_target,'-f','mp4'..一堆更多],标准输出= subprocess.PIPE,标准错误= subprocess.PIPE)' \t \t'出来,ERR = p.communicate()' \t \t'打印out' \t \t'打印err' –

+0

这工作,但我想从输出Popen ** **执行期间,不要等到完成后。格式在这个评论部分不起作用。 –

回答

0

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

-1

相反的.communicate()您可以使用Popen()刚刚启动子,此后定期行来检查其stdoutstderr行:

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()