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
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
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.
os.system()
a fost depreciat în favoareasubprocess
, consultați stackoverflow.com/a/4256153/4212158