无法获取标准输出数据 python



在对视频进行编码时,我正在尝试使用HandBrakeCLI程序获取命令的STDOUT的输出。我似乎无法让python在标准输出流上处理其输出。我尝试了以下代码:

import subprocess
import sys
encode = subprocess.check_output("HandBrakeCLI -i video.mkv -o out.mp4", shell=True, stderr=subprocess.STDOUT, universal_newlines=True)
print(encode)

这打印的什么都没有,我也尝试过:

import subprocess
import sys
encode = subprocess.Popen("HandBrakeCLI -i video.mkv -o out.mp4", stdout=subprocess.PIPE, stderr = subprocess.PIPE, shell=True, universal_newlines=True)
print(encode.stdout.read())

如前所述,两者都将导致无输出。该应用程序是在bash中编码时更新单行文本的类型。我不确定这种类型的数据流是否会给python带来问题。

似乎HandBrakeCLI会根据是否打印到终端来更改其输出。指定一个命令行标志来强制执行必要的输出,或者可以通过直接使用pexpectpty模块提供一个伪tty(如果系统支持的话)来欺骗它。

关于如何使用pexpectpty模块从子流程获得输出的代码示例:

  • 无法读取最后一行未缓冲的行
  • Python子进程readlines()挂起

最新更新