2013-07-09 4 views
9

Ich erhalte einen Fehler beim Ausführen des folgenden Codes.check_output Fehler in 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']) 

Fehler

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

ich auf Python 2.6.4 arbeite.

+0

Wollen Sie die Methode 'check_output' verwenden, die definiert ist? –

+0

Es gibt eine sehr gute Möglichkeit, dies zu tun, einschließlich der Erkennung, ob es notwendig ist, in [diese Antwort] gegeben (http://stackoverflow.com/a/13160748/1194883). – Mike

Antwort

5

Verwenden Sie einfach:

check_output(['./MyFile']) 

Sie Ihre eigene Funktion definiert haben, es ist nicht ein Attribut subprocess Modul (für Python 2.6 und früher).

Sie können auch die Funktion zum importierten Modulobjekt zuordnen (aber das ist nicht notwendig):

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

'File "DailyCheck.py", Zeile 19, in check_output ([ './ MyFile']) File "DailyCheck.py", Zeile 5, in check_output process = subprocess.Popen (stdout = subprocess.PIPE , * popenargs, ** kwargs) Datei "/usr/lib/python2.6/subprocess.py", Zeile 621, in __init__ errread, errrite) Datei "/usr/lib/python2.6/subprocess.py ", Zeile 1126, in _execute_child raise child_exception OSError: [Errno 2] Keine solche Datei oder Verzeichnis" NOt sicher, warum ich diesen Fehler bekomme. Die Datei befindet sich definitiv in dem angegebenen Ordner. – misguided

+1

Überprüfen Sie, ob der Wert von os.getcwd() korrekt ist (sollte das Verzeichnis sein, in dem sich MyFile befindet). –

+0

@TravisGD Sie sind richtig. Ich hatte "os.chdir (location)" versehentlich gelöscht, daher wurde der Fehler angezeigt. – misguided

7

Sie wahrscheinlich wollen nur check_output verwenden, aber, nur damit Sie wissen, gibt es ein Verfahren subprocess.check_output, aber es ist nicht definiert, bis Python 2.7 (http://docs.python.org/3/library/subprocess.html#subprocess.check_output)

Sie möchten vielleicht sogar dies, die die Funktion im Modul definiert, wenn es nicht da ist (dh vor v2.7 ausgeführt wird).

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

Eine schönere Weise, das zu tun, ist in [dieser Antwort] gegeben (http://stackoverflow.com/a/13160748/1194883). – Mike