es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , , ,

Answer

  1. Avatar for 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:

    subprocess.check_call(['screen', '-ls', '|', 'grep', '-i', INSTANCE_NAME], stdout=subprocess.DEVNULL)
    

    En este comando, estamos utilizando subprocess.check_call en lugar de os.system para ejecutar el comando screen. El argumento stdout=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 entre subprocess.run, subprocess.call y subprocess.check_call son:

    • subprocess.run devuelve un objeto CompletedProcess 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ón CalledProcessError 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 utilizar subprocess.check_call para comandos simples.

Comments are closed.