2010-09-30 16 views
5

Sto cercando di seguire le informazioni che posso trovare sui sottoprocessi.Popen come voglio fare una chiamata a linea di comando linux .. Sto provando come sotto ma sto ricevendo l'errore "[Errno 2] Nessun file o directory di questo tipo". Non sto cercando di aprire un file, quindi non capisco questo errore, e funziona bene (anche se con altri problemi relativi ad aspettare che il processo finisca quando non lo voglio) quando uso un normale sistema operativo .popen.Python, utilizzando subprocess.Popen per effettuare chiamate linea di comando linux? Sto ricevendo "[Errno 2] Nessun file o directory"

Non riesco a capire come farlo correttamente, ogni consiglio è apprezzato.

EDIT: IL COMANDO CHE STO UTILIZZANDO È COMPLESSO E VARIABILIZZATO, sarebbe troppo fuori dal contesto per includerlo qui, penso sia sufficiente dire che il codice funziona quando uso os.popen e non quando eseguo il comando nuovo modo, quindi no, la "linea di comando di Linux chiamata" non è, ovviamente, la chiamata che sto usando

subprocess.Popen([r"linux command line call"]) 
>>> [Errno 2] No such file or directory 
+7

È che letteralmente il codice si è tentato di correre? – zwol

+0

ovviamente no (perché lo chiedi anche tu?) Ma il codice è variato e non avrebbe molto senso qui senza contesto .. ok lo testerò con qualche altro codice base e aggiornerò il post – Rick

+0

, qualcuno ha già risposto la domanda, di seguito, a quanto pare sono stati in grado di capire cosa intendevo dire – Rick

risposta

14
import subprocess  
proc=subprocess.Popen(['ls','-l']) # <-- Change the command here 
proc.communicate() 

Popen si aspetta una lista di stringhe. La prima stringa è in genere il programma da eseguire, seguito dai suoi argomenti. A volte, quando il comando è complicata, è comodo da usare shlex.split per comporre la lista per voi:

import shlex 
proc=subprocess.Popen(shlex.split('ls -l')) 
proc.communicate() 
+0

si suppone di usare sempre 'ls' e mettere la chiamata alla riga di comando nella seconda parte? L'altro modo con shlex che hai postato sembra funzionare .. – Rick

+1

@Rick: 'ls' era solo un esempio; dovresti sostituirlo con qualsiasi comando reale tu stia cercando di eseguire. – unutbu

+0

Ho ottenuto 'subprocess.Popen (shlex.split ('ls -l'))' per lavorare con i comandi di base, come 'ls-l', ma per il mio comando, che è quello di avviare un server, sto ancora ottenendo ' [Errno 2] Nessun file o directory simile ", quando lo stesso comando esatto funziona utilizzando os.popen. È troppo fuori contesto per entrare nella chiamata di comando qui (è per il server web del selenio), ma mi chiedo se ci sia alcuna differenza per quanto riguarda ciò che il sistema sta ricevendo tra i diversi modi di effettuare le chiamate come non posso capire perché sta facendo questo – Rick

Problemi correlati