【问题标题】:Can't get stdout data python无法获取标准输出数据python
【发布时间】:2015-05-25 23:28:20
【问题描述】:

在对视频进行编码时,我正在尝试使用 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 带来问题。

【问题讨论】:

  • 你有没有试过在shell中输入你的cmd,它有返回吗?
  • 无关:第二个代码示例应该使用out, err = encode.communicate()以避免死锁的可能性。

标签: python subprocess output stdout


【解决方案1】:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-25
    • 2020-01-09
    • 1970-01-01
    • 1970-01-01
    • 2016-10-03
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多