【问题标题】:Capturing all output from subprocess in python3在python3中捕获子进程的所有输出
【发布时间】:2017-07-05 19:06:15
【问题描述】:

我想将所有输出捕获到子进程打印出来的变量中。这是我的代码:

#!/usr/bin/env python3

import subprocess # Subprocess management
import sys # System-specific parameters and functions

try:
    args = ["svn", "info", "/directory/that/does/not/exist"]
    output = subprocess.check_output(args).decode("utf-8")
except subprocess.CalledProcessError as e:
    error = "CalledProcessError: %s" % str(e)
except:
    error = "except: %s" % str(sys.exc_info()[1])
else:
    pass

此脚本仍将其打印到终端:

svn: E155007: '/directory/that/does/not/exist' 不是工作副本

如何将其捕获到变量中?

【问题讨论】:

    标签: python-3.x svn terminal subprocess capture


    【解决方案1】:

    check_output 只捕获标准输出而不捕获标准错误(根据https://docs.python.org/3.6/library/subprocess.html#subprocess.check_output

    为了捕获标准错误,你应该使用

    >>> subprocess.check_output(
    ...     "ls non_existent_file; exit 0",
    ...     stderr=subprocess.STDOUT, ...)
    

    顺便问一下,我建议您先阅读文档。

    【讨论】:

    • 这行得通,谢谢。我确实查看了手册和一些关于此的帖子,但我仍然没有让它自己工作。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 2016-07-21
    • 2020-05-23
    • 2020-10-18
    • 2011-02-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多