2015-08-18 16 views
6

Sto cercando di eseguire uno script di shell da uno script python utilizzando il seguente:Eseguire script di shell in pitone

from subprocess import call 
call(['bash run.sh']) 

Questo mi dà un errore, ma può essere eseguito con successo altri comandi come:

call(['ls']) 
+2

possibile duplicato di [Chiamata di un comando esterno in Python] (http://stackoverflow.com/questions/89228/calling-an-external-command-in-python) – kenorb

risposta

9

Si dovrebbe separare gli argomenti:

call(['bash', 'run.sh']) 
call(['ls','-l']) 
+0

Esiste un modo per eseguire gli script .sh in Python su Windows? – Royi

4
from subprocess import call 
import shlex 
call(shlex.split('bash run.sh')) 

Si desidera tokenizzare correttamente gli argomenti del comando. shlex.split() lo farà per te.

Fonte: https://docs.python.org/2/library/subprocess.html#popen-constructor

Nota shlex.split() può essere utile per determinare la corretta tokenizzazione per argomenti, soprattutto nei casi complessi:

3

Quando si chiama call() con un list, si aspetta ogni elemento di quell'elenco per corrispondere a un argomento della riga di comando. In questo caso sta cercando bash run.sh come l'eseguibile con spazi e tutto come una singola stringa.

provare uno di questi:

call("bash run.sh".split()) 
call(["bash", "run.sh"]) 
Problemi correlati