Come posso eseguire un comando della riga di comando in uno script Python?

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

  • Questo è quello che ho provato e ha funzionato, grazie mille Harry! Ma Dovevo prima combinare entrambi i programmi. Ora os.system (" sudo python Scale3.py ") si riavvia semplicemente dallinizio del programma Scale3.py, che va bene. Penso che anche import Scale3.py funzionerà. ' non ho provato il sottoprocesso, sembra interessante ed è probabilmente qualcosa che devo imparare .
  • os.system() è stato sconsigliato a favore di subprocess, vedere stackoverflow.com/a/4256153/4212158

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

  • ' sto cercando di imparare a impartire comandi da uno script Python (vedi qui e qui ) e riscontrando alcuni problemi. Mi chiedo se subprocess potrebbe essere migliore anche nel mio caso.

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.

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *