Hogyan futtathatok parancssori parancsot Python szkriptben?

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

  • Ezt próbáltam ki, és sikerült is, köszönöm szépen Harry! De Először össze kellett kapcsolnom mindkét programot. Most az os.system (" sudo python Scale3.py ") egyszerűen újraindul az elején a Scale3.py programból, ami rendben van. Azt hiszem, a Scale3.py importálása is működni fog. Nem próbáltam ' próbálni az alfolyamatot, érdekesnek tűnik, és valószínűleg meg kell tanulnom .
  • os.system() levonásra került a subprocess javára, lásd: stackoverflow.com/a/4256153/4212158

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

  • I ' próbálom megtanulni, hogyan adhatunk ki parancsokat egy Python szkriptből (lásd: itt és itt ), és vannak problémái. Kíváncsi vagyok, hogy a subprocess esetemben is jobb lehet-e.

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.

Vélemény, hozzászólás?

Az email címet nem tesszük közzé. A kötelező mezőket * karakterrel jelöltük