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
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
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.
os.system()
ha sido eliminado a favor desubprocess
, consulte stackoverflow.com/a/4256153/4212158