无法获取标准输出数据 python

Can't get stdout data 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 模块提供伪终端(如果您的系统支持)来欺骗它。

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

  • Last unbuffered line can't be read
  • Python subprocess readlines() hangs