首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >subprocess.check_output()似乎不存在(Python2.6.5)

subprocess.check_output()似乎不存在(Python2.6.5)
EN

Stack Overflow用户
提问于 2011-01-27 18:05:44
回答 2查看 57K关注 0票数 79

我一直在阅读关于子进程模块的Python文档(请参阅here),其中谈到了subprocess.check_output()命令,这似乎正是我所需要的。

但是,当我尝试使用它时,我得到一个错误,它不存在,并且当我运行dir(subprocess)时,它没有列出。

我运行的是Python 2.6.5,我使用的代码如下:

代码语言:javascript
复制
import subprocess
subprocess.check_output(["ls", "-l", "/dev/null"])

有人知道为什么会发生这种事吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-01-27 18:07:19

它是在2.7版本中引入的,请参阅docs

如果需要输出,请使用subprocess.Popen

代码语言:javascript
复制
>>> import subprocess
>>> output = subprocess.Popen(['ls', '-l'], stdout=subprocess.PIPE).communicate()[0]
票数 123
EN

Stack Overflow用户

发布于 2015-12-03 08:02:47

多亏了猴子补丁的建议(我的尝试失败了--但我们消耗了CalledProcessError输出,所以需要给猴子补丁)

在这里找到了一个可用的2.6补丁:http://pydoc.net/Python/pep8radius/0.9.0/pep8radius.shell/

代码语言:javascript
复制
"""Note: We also monkey-patch subprocess for python 2.6 to
give feature parity with later versions.
"""
try:
    from subprocess import STDOUT, check_output, CalledProcessError
except ImportError:  # pragma: no cover
    # python 2.6 doesn't include check_output
    # monkey patch it in!
    import subprocess
    STDOUT = subprocess.STDOUT

    def check_output(*popenargs, **kwargs):
        if 'stdout' in kwargs:  # pragma: no cover
            raise ValueError('stdout argument not allowed, '
                             'it will be overridden.')
        process = subprocess.Popen(stdout=subprocess.PIPE,
                                   *popenargs, **kwargs)
        output, _ = process.communicate()
        retcode = process.poll()
        if retcode:
            cmd = kwargs.get("args")
            if cmd is None:
                cmd = popenargs[0]
            raise subprocess.CalledProcessError(retcode, cmd,
                                                output=output)
        return output
    subprocess.check_output = check_output

    # overwrite CalledProcessError due to `output`
    # keyword not being available (in 2.6)
    class CalledProcessError(Exception):

        def __init__(self, returncode, cmd, output=None):
            self.returncode = returncode
            self.cmd = cmd
            self.output = output

        def __str__(self):
            return "Command '%s' returned non-zero exit status %d" % (
                self.cmd, self.returncode)
    subprocess.CalledProcessError = CalledProcessError
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4814970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档