2013-07-09 3 views
9

Я получаю сообщение об ошибке при запуске приведенного ниже кода.ошибка check_output в python

#!/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.

+0

Вы хотите использовать метод 'check_output', который определен? –

+0

Есть очень хороший способ сделать это, включая обнаружение, если это необходимо, данное в [этом ответе] (http://stackoverflow.com/a/13160748/1194883). – Mike

ответ

5

Просто используйте:

check_output(['./MyFile']) 

Вы определили свою собственную функцию, это не атрибут subprocess модуля (для Python 2.6 и выше).

Вы также можете назначить функцию импортируемого объекта модуля (но не обязательно):

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

'Файл "DailyCheck.py", строка 19, в check_output ([ './ MyFile']) Файл "DailyCheck.py", строка 5, в процессе check_output = subprocess.Popen (стандартный вывод = subprocess.PIPE , * popenargs, ** kwargs) Файл «/usr/lib/python2.6/subprocess.py», строка 621, в __init__ errread, errwrite) Файл «/usr/lib/python2.6/subprocess.py ", строка 1126, в _execute_child raise child_exception OSError: [Errno 2] Нет такого файла или каталога' Не знаю, почему я получаю эту ошибку. Файл определенно указан в указанной папке. – misguided

+1

Попробуйте проверить значение 'os.getcwd()' правильно (должен быть каталог, в котором находится MyFile). –

+0

@TravisGD вы правы. Я удалил 'os.chdir (location)' по ошибке, следовательно, получил ошибку. – misguided

7

Вы вероятно просто хотите использовать 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() 
+0

Более удобный способ сделать это приведен в [этом ответе] (http://stackoverflow.com/a/13160748/1194883). – Mike

Смежные вопросы