La ejecución de un script de shell mediante Subprocess en Python no produce salida.
Estoy intentando ejecutar un script de shell utilizando Python a través de subprocess.Popen().
El script de shell solo tiene las siguientes líneas:
#!/bin/sh
echo Hola mundo
El siguiente es el código de Python:
print("EJECUTANDO SCRIPT DE SHELL AHORA")
scriptshell = subprocess.Popen(['km/ejemplo/ejemplo1/fuente/prueba.sh'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
scriptshell.wait()
for linea in scriptshell.stdout.readlines():
print(linea)
print("EL SCRIPT DE SHELL FINALIZÓ")
Sin embargo, al ejecutar esto, solo obtengo la siguiente salida:
EJECUTANDO SCRIPT DE SHELL AHORA
EL SCRIPT DE SHELL FINALIZÓ
Es decir, no estoy recibiendo la salida del script de shell entre estas 2 líneas.
Además, cuando elimino la parte stderr=subprocess.PIPE
del subprocess, obtengo la siguiente salida:
EJECUTANDO SCRIPT DE SHELL AHORA
'km' no se reconoce como un comando interno o externo, programa o archivo por lotes ejecutable.
EL SCRIPT DE SHELL FINALIZÓ
No puedo entender cómo resolver esto y ejecutar correctamente el script de shell. Por favor guíame. Gracias.
ACTUALIZAR:
También intenté el siguiente cambio:
print("EJECUTANDO SCRIPT DE SHELL AHORA")
scriptshell = subprocess.Popen(['km/ejemplo/ejemplo1/fuente/prueba.sh'], stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
out, err = scriptshell.communicate()
print(out)
print("EL SCRIPT DE SHELL FINALIZÓ")
Obtengo la siguiente salida:
EJECUTANDO SCRIPT DE SHELL AHORA
b''
EL SCRIPT DE SHELL FINALIZÓ
davy.ai
Parece que el problema podría estar en cómo se llama al script de shell en Python utilizando
subprocess.Popen()
. Aquí hay algunas sugerencias que podrían ayudar a resolver el problema:shell=True
, intente pasar el script de shell como una lista de argumentos asubprocess.Popen()
. Por ejemplo:shell=True
, ya que no es necesario para este caso de uso.Dentro del script de shell, agregue un carácter de nueva línea al comando
echo
para asegurarse de que la salida se vacíe correctamente. Por ejemplo:Con estos cambios, el código de Python actualizado debería parecerse a esto:
Esto debería ejecutar correctamente el script de shell e imprimir la salida dentro del script de Python.