【问题标题】:python subprocess not capturing stdout [duplicate]python子进程未捕获标准输出[重复]
【发布时间】:2020-04-11 20:27:47
【问题描述】:

我试图在使用子进程运行 python 应用程序时捕获所有输出。我已经使用 subprocess.run 和 subprocess.Popen 尝试了几种变体。运行的 python 应用程序执行 perl 脚本并捕获此输出。

import subprocess as sp

print("some data")
print("some data")

x = subprocess.run(['script.py', 'some', 'options'], stdout=sp.PIPE, stderr=sp.PIPE)

proc_out = sp.stdout
proc_err = sp.stderr

我还尝试将 '> out 2>&1' 添加到列表中,尝试使用 capture_output=True,尝试重定向 stdout/stderr。奇怪的是,我试图捕获的打印语句不再显示。

所以,它是一个 python 应用程序(它的输出被捕获),它使用子进程调用另一个 python 应用程序(无法捕获它的输出),它又调用一个 perl 函数(它的输出被捕获)。

我已经完成了大多数引用捕获所有数据的线程,但仍然没有运气。

有什么想法吗?

【问题讨论】:

  • My question 有点矫枉过正,但可能会为您提供一个新的起点。
  • 谢谢,看来我的问题已通过将 python 添加为列表的第一个元素来解决。 subprocess.run(['python', cmd, args...) 谢谢。

标签: python


【解决方案1】:
import subprocess
command = "your command"
proc = subprocess.Popen([command], stdout=subprocess.PIPE, shell=True)
(out, err) = proc.communicate()

你需要 .communicate(),它写入输入然后读取所有输出并等待子进程退出,然后在当前/主线程中继续执行

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-28
    • 2016-07-26
    • 2020-10-18
    • 1970-01-01
    • 2016-02-15
    • 2011-02-01
    • 2010-10-29
    • 1970-01-01
    相关资源
    最近更新 更多