无法获取标准输出数据 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
会根据是否打印到终端来更改其输出。要么指定命令行标志以强制执行必要的输出,要么您可以通过直接使用 pexpect
或 pty
模块提供伪终端(如果您的系统支持)来欺骗它。
关于如何使用 pexpect
、pty
模块从子进程获取输出的代码示例:
- Last unbuffered line can't be read
- Python subprocess readlines() hangs
我试图在编码视频时使用 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
会根据是否打印到终端来更改其输出。要么指定命令行标志以强制执行必要的输出,要么您可以通过直接使用 pexpect
或 pty
模块提供伪终端(如果您的系统支持)来欺骗它。
关于如何使用 pexpect
、pty
模块从子进程获取输出的代码示例:
- Last unbuffered line can't be read
- Python subprocess readlines() hangs