eseguo un comando in python utilizzando la funzione subprocess.Popen() come il seguente:pitone: alzare child_exception, OSError: [Errno 2] Nessun file o directory
omp_cmd = 'cat %s | omp -h %s -u %s -w %s -p %s -X -' %(temp_xml, self.host_IP, self.username, self.password, self.port)
xmlResult = Popen(omp_cmd, stdout=PIPE, stderr=STDOUT)
Nella shell funziona bene anche senza errore, ma in python ottengo:
File "/home/project/vrm/apps/audit/models.py", line 148, in sendOMP
xmlResult = Popen(omp_cmd, stdout=PIPE, stderr=STDOUT)
File "/usr/local/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/local/lib/python2.7/subprocess.py", line 1228, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
Ho cercato l'errore ma nessuno di loro ha risolto il mio problema. Qualcuno sa qual è la causa di questo problema? Grazie.
Hai ragione !! Ancora una domanda, se shell = False, gli argomenti dovrebbero essere una lista, giusto? Qual è la differenza tra questi due modi? –
Per rispondere alla tua domanda, quel comando che ho memorizzato nel file è lungo 9000 righe, il mio sistema operativo mi darà "arg elenco errore troppo lungo" :) –
@da_zhuang - sì, con 'shell = False', gli argomenti sono tipicamente una lista. Ho usato la funzione 'shlex.split' che prende una stringa e la divide in una lista allo stesso modo di una shell tipica. con 'shell = True', si passa una stringa e tale stringa viene valutata da una shell. con 'shell = False' si passa una stringa o una lista. Se una stringa, viene valutata come se fosse l'unico comando. ('" ls -l "' fallirebbe dato che non esiste alcun comando 'ls -l', solo' ls'). Se si tratta di un elenco, ogni elemento viene considerato come argomento. '[" ls "," -l "]' – mgilson