【问题标题】:check_output error in pythonpython中的check_output错误
【发布时间】:2013-07-09 04:34:31
【问题描述】:

运行以下代码时出现错误。

#!/usr/bin/python
import subprocess
import os
def check_output(*popenargs, **kwargs):
    process = subprocess.Popen(stdout=subprocess.PIPE, *popenargs, **kwargs)
    output, unused_err = process.communicate()
    retcode = process.poll()
    if retcode:
        cmd = kwargs.get("args")
        if cmd is None:
            cmd = popenargs[0]
        error = subprocess.CalledProcessError(retcode, cmd)
        error.output = output
        raise error
    return output

location = "%s/folder"%(os.environ["Home"])
subprocess.check_output(['./MyFile'])

错误

subprocess.check_output(['./MyFile'])
AttributeError: 'module' object has no attribute 'check_output'

我正在处理 Python 2.6.4

【问题讨论】:

  • 您的意思是使用定义的check_output 方法吗?
  • 有一个非常好的方法可以做到这一点,包括检测是否有必要,在this answer中给出。

标签: python python-2.6


【解决方案1】:

可能只是想使用check_output,但是,你知道,有一个方法subprocess.check_output,但直到Python 2.7才定义(http://docs.python.org/3/library/subprocess.html#subprocess.check_output

您甚至可能想要这个,它定义了模块中不存在的函数(即在 v2.7 之前运行)。

try: subprocess.check_output
except: subprocess.check_output = check_output
subprocess.check_output()

【讨论】:

【解决方案2】:

只需使用:

check_output(['./MyFile'])

您已经定义了自己的函数,它不是 subprocess 模块的属性(适用于 Python 2.6 及更早版本)。

您也可以将函数分配给导入的模块对象(但这不是必需的):

subprocess.check_output = check_output
location = "%s/folder" % (os.environ["Home"])
subprocess.check_output(['./MyFile'])

【讨论】:

  • File "DailyCheck.py", line 19, in <module> check_output(['./MyFile']) File "DailyCheck.py", line 5, in check_output process = subprocess.Popen(stdout=subprocess.PIPE, *popenargs, **kwargs) File "/usr/lib/python2.6/subprocess.py", line 621, in __init__ errread, errwrite) File "/usr/lib/python2.6/subprocess.py", line 1126, in _execute_child raise child_exception OSError: [Errno 2] No such file or directory 不知道为什么我会收到这个错误。该文件肯定在指定的文件夹中。
  • 尝试检查os.getcwd()的值是否正确(应该是MyFile所在的目录)。
  • @TravisGD 你是对的。我错误地删除了os.chdir(location),因此出现了错误。
【解决方案3】:

尝试以下方法:

from subprocess import check_output 
print(check_output(["dir", "C:\\Downloads\\file.csv"],shell=True).decode("utf8"))

确保路径中有 \ 而不是“/”和“dir”而不是“ls”

【讨论】:

    猜你喜欢
    • 2021-12-12
    • 2015-09-25
    • 1970-01-01
    • 2015-05-08
    • 2013-05-16
    • 2016-07-10
    • 2017-11-15
    • 1970-01-01
    • 2018-02-21
    相关资源
    最近更新 更多