I “m 2 különálló parancsfájl használatával, Scale1.py
és Scale2.py
. Futtatásukhoz a terminál parancssorából be kell írnom a sudo python Scale1.py
vagy a sudo python Scale2.py
parancsot. Szeretnék egy sort a Scale2.py
szkript, amelyben ha megnyomok egy gombot, a program megszakad és futtatja a Scale1.py
-t. Valami ilyesmi, ami nem működik.
if GPIO.input(23) == False: break(sudo python Scale1.py)
Válasz
os.system("sudo python scale1.py")
először importálnia kell az os modult
import os
A teszteléshez nincs nálam pi, de ez a kérdés második válaszából származik: https://stackoverflow.com/questions/89228/calling-an-external-command-in-python
Megjegyzések
Válasz
Általában használja a alfolyamat modult
subprocess.call(["sudo","python","scale1.py"])
parancssori hívásokhoz.
Példa egy alfolyamatos hívás eredményének feldolgozására;
result = subprocess.check_output(["sudo","service","mpd","restart"])
A alfolyamat több régebbi modult és funkciót helyettesít, például os.system és os.spawn . Jó munkát végez az érvek tisztításában, ezért megvédi Önt a héjinjekció tól.
https://docs.python.org/2/library/subprocess.html
Természetesen egy második python szkript futtatásához nincs szükség CLI hívásra, ezeket importálhatja.
Megjegyzések
Válasz
Használhatja a sudo-t harry sib javaslataként, de hozzá kell adnia az első szkriptet futtató felhasználót a sudoers fájlhoz .
A python szkript futtatásának másik python szkriptből a legjobb módja az importálása. A szkript logikájának rendelkeznie kell a második szkript metódusával:
# 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()
Megjegyzések
- +1, Mivel a python képes erre, ez lesz a
cleanest
válasz. - +1 , ez a helyes módja annak, amit az OP akar, és valószínűleg az elfogadott válasznak kell lennie.
os.system()
levonásra került asubprocess
javára, lásd: stackoverflow.com/a/4256153/4212158