2013-07-09 12 views
9

Si è verificato un errore durante l'esecuzione del codice riportato di seguito.check_output error 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']) 

errore

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

sto lavorando Python 2.6.4.

+0

Si intende utilizzare il metodo 'check_output' che è definito? –

+0

C'è un modo molto carino per farlo, incluso il rilevamento se è necessario, indicato in [questa risposta] (http://stackoverflow.com/a/13160748/1194883). – Mike

risposta

5

Basta usare:

check_output(['./MyFile']) 

Hai definito la propria funzione, non è un attributo del modulo subprocess (per Python 2.6 e precedenti).

È inoltre possibile assegnare la funzione all'oggetto modulo importato (ma non è necessario):

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

'File "DailyCheck.py", linea 19, in check_output ([ './ MyFile']) File "DailyCheck.py", la linea 5, in check_output processo = subprocess.Popen (stdout = subprocess.PIPE , * popenargs, ** kwargs) File "/usr/lib/python2.6/subprocess.py", riga 621, in __init__ errread, errwrite) File "/usr/lib/python2.6/subprocess.py ", riga 1126, in _execute_child raise child_exception OSError: [Errno 2] Nessun file o directory di questo tipo. Non è sicuro del motivo per cui viene visualizzato questo errore. Il file è sicuramente presente nella cartella specificata. – misguided

+1

Provare a verificare il valore di 'os.getcwd()' è corretto (dovrebbe essere la directory in cui si trova MyFile). –

+0

@TravisGD sei corretto. Ho cancellato 'os.chdir (posizione)' per errore, quindi ho ricevuto l'errore. – misguided

7

È probabilmente vogliono solo usare check_output, ma, solo così sai, c'è un metodo subprocess.check_output, ma non è definito fino a Python 2.7 (http://docs.python.org/3/library/subprocess.html#subprocess.check_output)

Si potrebbe anche volere questo, che definisce la funzione nel modulo se non è lì (cioè in esecuzione prima v2.7).

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

Un modo più bello per farlo è indicato in [questa risposta] (http://stackoverflow.com/a/13160748/1194883). – Mike