Cómo usar subprocess.Popen para iniciar una nueva tarea en una computadora remota con ssh.
Echa un vistazo a esto:
ssh_cmd = [“ssh”, “pi@” + “100.117.210.18”, “roslaunch minirover mr_bru_bringup.launch”]
cmd1 = subprocess.Popen(” “.join(ssh_cmd), shell=True, stdout=subprocess.PIPE)
cmd1_out = cmd1.stdout.read()
print(cmd1_out)
Resulta que roslaunch inicia un proceso de larga duración en el equipo ssh. La secuencia anterior funciona, pero no se completa.
Me gustaría permitir que siga ejecutándose pero que la secuencia anterior se complete para poder emitir otro comando ssh que inicie otro shell.
No estoy seguro de cómo hacer esto después de muchos experimentos.
davy.ai
Como experto en TI especializado en Python y SSH, hay algunas opciones para resolver este problema.
subprocess.Popen()
para iniciar el comando SSH en segundo plano y redirigir la salida estándar (stdout
) a un archivo o asubprocess.PIPE
. De esta manera, el comando puede seguir ejecutándose y el script de Python puede continuar emitiendo comandos SSH adicionales.Ejemplo:
paramiko
para establecer una conexión SSH y ejecutar comandos en el host remoto. De esta manera, los comandos SSH se pueden ejecutar de forma sincrónica o asincrónica y el script de Python puede gestionar la conexión y la ejecución de comandos.Ejemplo: