【问题标题】:Capturing console output in Python在 Python 中捕获控制台输出
【发布时间】:2014-08-15 20:05:51
【问题描述】:

例如,我可以捕获命令行执行的输出

import subprocess
cmd = ['ipconfig']
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
output = proc.communicate()[0]
print output

在上面的示例中,ipconfig 很简单,当直接在命令行上运行时,将在同一个控制台窗口上打印输出。但是,在某些情况下,该命令会打开一个新的控制台窗口以显示所有输出。这方面的一个例子是从命令行运行 VLC.exe。以下 VLC 命令将打开一个新的控制台窗口来显示消息:

vlc.exe -I rc XYZ.avi

我想知道如何在 Python 中捕获显示在第二个控制台窗口上的输出。上面的 ipconfig 示例在这种情况下不起作用。

问候

SS

【问题讨论】:

  • 根据您需要的输出,可以配置 vlc.exe 将其输出写入日志文件,然后您的程序可以读取该文件,而不是尝试通过管道传输 vlc.exe 的控制台输出.

标签: python subprocess stdout


【解决方案1】:

我认为这确实是 VLC 界面的问题。 vlc.exe 可能有一些选项,因此它不会在新窗口中启动控制台或提供输出。一般来说,没有什么可以阻止我运行一个进程,该进程运行另一个进程并且不将其输出提供给我的进程的调用者。

【讨论】:

  • VLC 界面相当棘手。跟随参数将禁用 GUI 界面和视频渲染:-Vdummy -Idummy --dummy-quiet。我还建议您使用--play-and-exit(就是它的样子)和-vvv(以获得尽可能多的输出)
【解决方案2】:

请注意,在您的第二个命令中,您有多个参数(-I、rc 和文件名 - XYZ.avi),在这种情况下,您的 cmd 变量应该是 - 您要运行的命令的列表,后跟该命令的所有参数:

试试这个:

import subprocess
cmd=['vlc.exe',  '-I', 'rc', 'XYZ.avi']
proc = subprocess.Popen(cmd, stdout=subprocess.PIPE)
output = proc.communicate()[0]
print output

如果您没有从正确的目录运行脚本,您可能需要在 cmd var 中为 vlc.exe 和 XYZ.avi 提供绝对路径

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-10-31
    • 2010-11-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-06
    • 1970-01-01
    • 2010-11-19
    相关资源
    最近更新 更多