Python监控手刹的进度

时间:2016-06-20 15:05:29

标签: python subprocess progress-bar handbrake

所以我正在使用handbrake和python根据时间表对视频进行编码。我需要监视进度,因为我用它来估计编码时间。然后我可以把它放到我的调度程序上。

我遇到了从流程中获取ETA和%完成的问题。这是我到目前为止所拥有的

profile = ["HandBrakeCLI","-i",input,"-o","output","-e","x264"]
cp = subprocess.Popen(profile, stderr=subprocess.PIPE, bufsize=1)
for line in iter(cp.stderr.readline, b''):

  # regex match for % complete and ETA
  matches = re.match( r'.*(\d+\.\d+)\s%.*ETA\s(\d+)h(\d+)m(\d+)s', line.decode('utf-8') )

  if matches:
    print( matches.group() )

  print(line),

cp.stderr.close()
cp.wait()

它不匹配,实际上我并不完全确定发生了什么。当我运行我的脚本时,我看到ETA和%完成打印

Encoding: task 1 of 1, 1.19 % (45.57 fps, avg 62.74 fps, ETA 00h08m01s)

我尝试过使用stdout,但它也没有用。

1 个答案:

答案 0 :(得分:0)

你需要从stdout读取,而不是stderr。

<?php
   if(is_user_logged_in())
   {
?>
     <style type="text/css"> .search-label{ display:none !important; }</style>
<?php
   }
?>

使用进度包装器(使用clint.textui.progress.Bar)并逐字节读取(适用于我):

profile = ["HandBrakeCLI","-i",input,"-o","output","-e","x264"]
cp = subprocess.Popen(profile, stderr=subprocess.PIPE, strout=subprocess.PIPE, bufsize=1)
for line in iter(cp.stdout.readline, b''):

  # regex match for % complete and ETA
  matches = re.match( r'.*(\d+\.\d+)\s%.*ETA\s(\d+)h(\d+)m(\d+)s', line.decode('utf-8') )

  if matches:
    print( matches.group() )

  print(line),

cp.stderr.close()
cp.stdout.close()
cp.wait()

没有测试代码,重新编写它以匹配线程的初始帖子。

希望有所帮助。