¿Cómo ejecuto un comando de línea de comandos en un script de Python?

Estoy «usando 2 secuencias de comandos separadas, Scale1.py y Scale2.py. Para ejecutarlos, ingrese sudo python Scale1.py o sudo python Scale2.py desde la línea de comando de la terminal. Me gustaría tener una línea en el Scale2.py secuencia de comandos en la que si presiono un botón, el programa se rompe y ejecuta Scale1.py. Algo como esto, que no funciona.

 if GPIO.input(23) == False: break(sudo python Scale1.py)  

Respuesta

os.system("sudo python scale1.py")

primero deberá importar el módulo del sistema operativo

import os

No tengo un cajero automático para probar, pero esto proviene de la segunda respuesta a esta pregunta: https://stackoverflow.com/questions/89228/calling-an-external-command-in-python

Comentarios

  • Esto es lo que probé y funcionó, muchas gracias Harry! Pero Tuve que combinar ambos programas primero. Ahora, el sistema os.system (" sudo python Scale3.py ") simplemente se reinicia al principio del programa Scale3.py, que está bien. Creo que importar Scale3.py también funcionará. No ' probé el subproceso, parece interesante y probablemente sea algo que deba aprender .
  • os.system() ha sido eliminado a favor de subprocess, consulte stackoverflow.com/a/4256153/4212158

Respuesta

En general, use el subproceso módulo

subprocess.call(["sudo","python","scale1.py"]) 

para llamadas de línea de comando.

Un ejemplo de procesamiento del resultado de una llamada de subproceso;

 result = subprocess.check_output(["sudo","service","mpd","restart"]) 

Subprocess reemplaza varios módulos y funciones más antiguos, como os.system y os.spawn . Hace un buen trabajo en la desinfección de argumentos, por lo que lo protege de la inyección de shell .

https://docs.python.org/2/library/subprocess.html

Por supuesto, para ejecutar un segundo script de Python no es necesario realizar una llamada a la CLI, puede importarlos.

Comentarios

  • Yo ' estoy tratando de aprender a emitir comandos desde una secuencia de comandos de Python (consulte aquí y aquí ) y tiene algunos problemas. Me pregunto si subprocess podría ser mejor en mi caso también.

Responder

Puedes usar sudo como sugirió harry sib, pero deberías agregar el usuario que ejecuta el primer script al archivo sudoers .

La mejor manera de ejecutar un script de Python desde otro script de Python es importarlo. Debe tener la lógica de su script en un método en el segundo script:

 # Scale2.py def run(): do_first() do_second() [...] # Run it only if called from the command line if __name__ == "__main__": run() 
 # Scale1.py import Scale2 if (GPIO.input(23) == False): Scale2.run() 

Comentarios

  • +1, dado que Python es capaz de hacer esto, será la cleanest respuesta.
  • +1 , esta es la forma correcta de hacer lo que quiere el OP y probablemente debería ser la respuesta aceptada.

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *