2013-07-09 26 views
9

Otrzymuję błąd podczas uruchamiania poniższego kodu.Błąd check_output w pythonie

#!/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']) 

Błąd

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

pracuję nad Python 2.6.4.

+0

Czy chcesz użyć zdefiniowanej metody 'check_output'? –

+0

Istnieje bardzo dobry sposób, aby to zrobić, w tym wykrywanie, czy jest to konieczne, podane w [tej odpowiedzi] (http://stackoverflow.com/a/13160748/1194883). – Mike

Odpowiedz

5

Wystarczy użyć:

check_output(['./MyFile']) 

zdefiniowaniu swoją funkcję, to nie jest atrybutem modułu subprocess (dla Pythona 2.6 i wcześniejszych).

Można również przypisać funkcję do importowanego obiektu modułu (ale nie jest to konieczne):

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

'Plik "DailyCheck.py", wiersz 19, w check_output ([ './ MOjPlik']) Plik "DailyCheck.py", wiersz 5, w check_output procesie = subprocess.Popen (standardowe wyjście = subprocess.PIPE , * popenargs, ** kwargs) Plik "/usr/lib/python2.6/subprocess.py", wiersz 621, w __init__ errread, errwrite) Plik "/usr/lib/python2.6/subprocess.py ", wiersz 1126, w _execute_child raise child_exception OSError: [Errno 2] Brak takiego pliku lub katalogu' Nie wiem, dlaczego otrzymuję ten błąd. Plik jest określony w określonym folderze. – misguided

+1

Sprawdź, czy wartość 'os.getcwd()' jest poprawna (powinien to być katalog, w którym znajduje się MyFile). –

+0

@TravisGD masz rację. Usunąłem przez pomyłkę 'os.chdir (location)', więc dostałem błąd. – misguided

7

Ty prawdopodobnie prostu chcesz użyć check_output, ale tak wiesz, nie jest to metoda subprocess.check_output, ale nie jest zdefiniowany, dopóki Python 2.7 (http://docs.python.org/3/library/subprocess.html#subprocess.check_output)

Możesz nawet chcieć tego, co definiuje funkcję w module, jeśli jej tam nie ma (tj. Działa przed wersją v2.7).

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

Lepszy sposób na to jest podany w [tej odpowiedzi] (http://stackoverflow.com/a/13160748/1194883). – Mike