Convirtiendo `os.system` a `subprocess` en Python.
Quiero buscar un ID de Pantalla de Linux en Python para verificar si esta Pantalla existe. Me gustaría convertir mi comando os.system
a un comando subprocess
.
De esto:
python
os.system('screen -ls | grep -i ' + INSTANCE_NAME + ' >/dev/null')
a esto:
python
subprocess.check_call(['screen', '-ls', '|', 'grep', '-i', INSTANCE_NAME])
El comando os.system
funciona bien, pero no el comando subprocess
. ¿Cuáles son las diferencias entre subprocess.run
, subprocess.call
y subprocess.check_call
? ¿Alguien puede ayudarme?
Estoy usando Python 3.10 en Linux Ubuntu Server 20.04 LTS.
davy.ai
Para obtener el ID de una pantalla de Linux en Python y comprobar si la pantalla existe, puedes usar el siguiente comando
subprocess
:En este comando, estamos utilizando
subprocess.check_call
en lugar deos.system
para ejecutar el comandoscreen
. El argumentostdout=subprocess.DEVNULL
se utiliza para redireccionar la salida del comando y no mostrarla en la consola.El módulo
subprocess
proporciona varias funciones para ejecutar comandos externos. Las principales diferencias entresubprocess.run
,subprocess.call
ysubprocess.check_call
son:subprocess.run
devuelve un objetoCompletedProcess
que contiene información sobre la ejecución del comando. Permite mayor flexibilidad en la gestión de las corrientes de entrada/salida y las opciones del comando.subprocess.call
ejecuta el comando y devuelve el código de salida del proceso. No captura la salida del comando.subprocess.check_call
ejecuta el comando y genera una excepciónCalledProcessError
si el código de salida no es cero. Es útil cuando quieres asegurarte de que el comando tenga éxito sin manejar la salida.En general, se recomienda utilizar
subprocess.run
para ejecuciones de comandos más complejas y utilizarsubprocess.check_call
para comandos simples.