¿Cómo llamar a un script de shell desde el código python?

¿Cómo llamar a un script de shell desde el código python?

El módulo de subproceso le 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.

Hay algunas maneras de usar os.popen() (en desuso) o el módulo de subprocess completo, pero este enfoque

 import sys, os os.system(command) 

Es uno de los más fáciles.

En caso de que quiera pasar algunos parámetros a su script de shell, puede usar el método shlex.split () :

 import subprocess import shlex subprocess.call(shlex.split('./test.sh param1 param2')) 

con test.sh en la misma carpeta:

 #!/bin/sh echo $1 echo $2 exit 0 

Salidas:

 $ python test.py param1 param2 
 import os import sys 

Suponiendo que test.sh es el script de shell que desea ejecutar

 os.system("sh test.sh") 

Utilice el módulo de subproceso como se mencionó anteriormente.

Lo uso así:

 subprocess.call(["notepad"]) 

Estoy ejecutando Python 3.5 y subprocess.call ([‘./ test.sh’]) no funciona para mí.

Te doy tres soluciones dependiendo de lo que quieras hacer con la salida.

1 – script de llamada. Verás salida en tu terminal. La salida es un número.

 import subprocess output = subprocess.call(['test.sh']) 

2 – ejecución y volcado de la ejecución y error en la cadena. No ve ejecución en su terminal a menos que imprima (stdout). Shell = Verdad como argumento en Popen no funciona para mí.

 import subprocess from subprocess import Popen, PIPE session = subprocess.Popen(['test.sh'], stdout=PIPE, stderr=PIPE) stdout, stderr = session.communicate() if stderr: raise Exception("Error "+str(stderr)) 

3: llame al script y descargue los comandos de eco de temp.txt en temp_file

 import subprocess temp_file = open("temp.txt",'w') subprocess.call([executable], stdout=temp_file) with open("temp.txt",'r') as file: output = file.read() print(output) 

No olvides echar un vistazo al subproceso doc.

El subproceso es bueno, pero a algunas personas les puede gustar más la escritura . Scriptine tiene más conjuntos de métodos de alto nivel como shell.call (args) , path.rename (new_name) y path.move (src, dst) . Scriptine se basa en subproceso y otros.

Dos inconvenientes de scriptine:

  • El nivel de documentación actual sería más completo aunque sea suficiente.
  • A diferencia del subproceso, el paquete scriptine actualmente no está instalado de forma predeterminada.

El módulo de subproceso es un buen módulo para iniciar subprocesos. Puedes usarlo para llamar a comandos de shell como esto:

 subprocess.call(["ls","-l"]); #basic syntax #subprocess.call(args, *) 

Puedes ver su documentación aquí.

Si tiene su script escrito en algún archivo .sh o en una cadena larga, entonces puede usar el módulo os.system. Es bastante simple y fácil de llamar:

 import os os.system("your command here") # or os.system('sh file.sh') 

Este comando ejecutará el script una vez, hasta que se complete, y se bloqueará hasta que salga.

En caso de que el script tenga múltiples argumentos.

 #!/usr/bin/python import subprocess output = subprocess.call(["./test.sh","xyz","1234"]) print output 

La salida le dará el código de estado. Si el script se ejecuta correctamente, dará 0 de lo contrario un entero que no sea cero.

 podname=xyz serial=1234 0 

A continuación se muestra la secuencia de comandos test.sh shell.

 #!/bin/bash podname=$1 serial=$2 echo "podname=$podname serial=$serial" 

Por favor intente los siguientes códigos:

 Import Execute Execute("zbx_control.sh")