Sto utilizzando 2 script separati, Scale1.py
e Scale2.py
. Per eseguirli inserisco sudo python Scale1.py
o sudo python Scale2.py
dalla riga di comando del terminale. Vorrei avere una riga nel Scale2.py
script in cui se premo un pulsante, il programma si interrompe ed esegue Scale1.py
. Qualcosa di simile, che non “funziona”.
if GPIO.input(23) == False: break(sudo python Scale1.py)
Risposta
os.system("sudo python scale1.py")
per prima cosa dovrai importare il modulo del sistema operativo
import os
Non ho un pi con me da testare, ma questo deriva dalla seconda risposta a questa domanda: https://stackoverflow.com/questions/89228/calling-an-external-command-in-python
Commenti
Risposta
In generale, utilizza il sottoprocesso modulo
subprocess.call(["sudo","python","scale1.py"])
per le chiamate da riga di comando.
Un esempio che elabora il risultato di una chiamata di sottoprocesso;
result = subprocess.check_output(["sudo","service","mpd","restart"])
Subprocess sostituisce diversi moduli e funzioni precedenti, come os.system e os.spawn . Fa un buon lavoro nel disinfettare gli argomenti, quindi ti protegge dall iniezione di shell .
https://docs.python.org/2/library/subprocess.html
Ovviamente per eseguire un secondo script Python non è necessaria la chiamata CLI, è possibile importarli.
Commenti
Risposta
Puoi usare sudo come suggerito da harry sib, ma dovresti aggiungere lutente che esegue il primo script al file sudoers .
Il modo migliore per eseguire uno script python da un altro script python è importarlo. Dovresti avere la logica del tuo script in un metodo nel secondo 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()
Commenti
- +1, poiché python è in grado di farlo, sarà la
cleanest
risposta. - +1 , questo è il modo corretto di fare ciò che vuole lOP e dovrebbe probabilmente essere la risposta accettata.
os.system()
è stato sconsigliato a favore disubprocess
, vedere stackoverflow.com/a/4256153/4212158