Cum execut o comandă de linie de comandă într-un script Python?

Eu „folosesc 2 scripturi separate, Scale1.py și Scale2.py. Pentru a le rula, introduc sudo python Scale1.py sau sudo python Scale2.py din linia de comandă a terminalului. Aș dori să am o linie în Scale2.py script în care, dacă apăs un buton, programul se rupe și rulează Scale1.py. Ceva de genul acesta, care nu funcționează.

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

Răspuns

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

mai întâi va trebui să importați modulul OS

import os

Nu am un pi cu mine de testat, dar acesta provine din al doilea răspuns la această întrebare: https://stackoverflow.com/questions/89228/calling-an-external-command-in-python

Comentarii

  • Asta am încercat și a funcționat, mulțumesc mult Harry! Dar A trebuit să combin mai întâi ambele programe. Acum os.system (" sudo python Scale3.py ") repornește pur și simplu la început din programul Scale3.py, care este în regulă. Cred că și importul Scale3.py va funcționa. Nu am încercat ' să încerc subproces, arată interesant și este probabil ceva ce trebuie să învăț .
  • os.system() a fost depreciat în favoarea subprocess, consultați stackoverflow.com/a/4256153/4212158

Răspuns

În general, utilizați subproces modul

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

pentru apeluri pe linia de comandă.

Un exemplu de procesare a rezultatului unui apel subproces;

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

Subproces înlocuiește mai multe module și funcții mai vechi, cum ar fi os.system și os.spawn . Face o treabă bună la igienizarea argumentelor, așa că te protejează de injectarea shell .

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

Desigur, pentru a rula un al doilea script python nu este nevoie de apel CLI, le puteți importa.

Comentarii

  • ' încerc să învăț cum să emit comenzi dintr-un script Python (consultați aici și aici ) și având unele probleme. Mă întreb dacă subprocess ar putea fi mai bun și în cazul meu.

Răspunde

Puteți utiliza sudo așa cum a sugerat harry sib, dar ar trebui să adăugați utilizatorul care execută primul script în fișier sudoers .

Cel mai bun mod de a rula un script python dintr-un alt script python este să-l importați. Ar trebui să aveți logica scriptului într-o metodă din al doilea 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() 

Comentarii

  • +1, deoarece Python este capabil de acest lucru, va fi răspunsul cleanest.
  • +1 , acesta este modul corect de a face ceea ce PO dorește și probabil ar trebui să fie răspunsul acceptat.

Lasă un răspuns

Adresa ta de email nu va fi publicată. Câmpurile obligatorii sunt marcate cu *