¿Cómo llamar a un script de shell desde código python?
211
El módulo de subproceso lo ayudará.
Ejemplo descaradamente trivial:
>>> import subprocess
>>> subprocess.call(['./test.sh']) # Thanks @Jim Dennis for suggesting the []
0
>>>
Donde test.sh
es un script de shell simple y 0
es su valor de retorno para esta ejecución.
chmod +x script.sh
. Nota: script.sh es un marcador de posición para su script, reemplácelo en consecuencia.Hay algunas formas de usar
os.popen()
(en desuso) o todo elsubprocess
módulo, pero este enfoqueEs uno de los más fáciles.
fuente
subprocess
usted puede administrar tuberías de entrada / salida / error. También es mejor cuando tiene muchos argumentos,os.command()
ya que tendrá que crear una línea de comando completa con caracteres especiales de escape, consubprocess
una simple lista de argumentos. Pero para tareas simplesos.command()
puede ser suficiente.The subprocess module provides more powerful facilities for spawning new processes and retrieving their results; *using that module is preferable to using this function.*
En caso de que desee pasar algunos parámetros a su script de shell, puede usar el método shlex.split () :
con
test.sh
en la misma carpeta:Salidas:
fuente
Suponiendo que test.sh es el script de shell que desea ejecutar
fuente
Utilice el módulo de subproceso como se mencionó anteriormente.
Lo uso así:
fuente
Estoy ejecutando python 3.5 y subprocess.call (['./ test.sh']) no funciona para mí.
Te doy tres soluciones depende de lo que quieras hacer con la salida.
1 - guión de llamada. Verá la salida en su terminal. La salida es un número.
2 - ejecución de llamada y volcado y error en cadena. No ve la ejecución en su terminal a menos que imprima (stdout). Shell = Verdadero ya que el argumento en Popen no funciona para mí.
3 - llama al script y volca los comandos echo de temp.txt en temp_file
No olvides echar un vistazo al subproceso de documentación
fuente
subprocess.call
. El proceso secundario se bloqueará si genera suficiente salida a una tubería para llenar el búfer de tubería del sistema operativo ya que no se están leyendo las tuberías.El módulo de subproceso es un buen módulo para iniciar subprocesos. Puede usarlo para llamar a comandos de shell como este:
Puedes ver su documentación aquí.
Si tiene su script escrito en algún archivo .sh o en una cadena larga, puede usar el módulo os.system. Es bastante simple y fácil llamar:
Este comando ejecutará el script una vez, hasta su finalización, y lo bloqueará hasta que salga.
fuente
En caso de que el script tenga múltiples argumentos
La salida dará el código de estado. Si el script se ejecuta con éxito, dará 0, de lo contrario, un número entero distinto de cero
A continuación se muestra el script de shell test.sh.
fuente
El subproceso es bueno, pero a algunas personas les puede gustar más la escritura . Scriptine tiene más conjunto de métodos de alto nivel como shell.call (args) , path.rename (new_name) y path.move (src, dst) . La escritura se basa en subprocesos y otros.
Dos inconvenientes de la escritura:
fuente
Sé que esta es una pregunta antigua, pero me topé con esto recientemente y terminó por desviarme desde la API de subproceso , modificada desde Python 3.5.
La nueva forma de ejecutar scripts externos es con la
run
función, que ejecuta el comando descrito por args. Espera a que se complete el comando y luego devuelve una instancia de CompletedProcess.fuente
Si su archivo de script de shell no tiene permisos de ejecución, hágalo de la siguiente manera.
fuente
Por favor, intente los siguientes códigos:
fuente