2013-07-09 32 views
9

我在運行下面的代碼時發現錯誤。python中的check_output錯誤

#!/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(STDOUT = 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,但是,只要你知道,有一種方法但是直到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