Jak spustím příkaz z příkazového řádku ve skriptu Pythonu?

Používám 2 samostatné skripty, Scale1.py a Scale2.py. Chcete-li je spustit, zadám sudo python Scale1.py nebo sudo python Scale2.py z příkazového řádku terminálu. Chtěl bych mít řádek v Scale2.py skript, ve kterém když stisknu tlačítko, program se rozbije a spustí Scale1.py. Něco takového, co nefunguje.

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

Odpovědět

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

nejdříve budete muset importovat modul os

import os

Nemám u sebe atm k testování, ale toto vychází z druhé odpovědi na tuto otázku: https://stackoverflow.com/questions/89228/calling-an-external-command-in-python

Komentáře

  • O to jsem se pokusil a fungovalo to, díky moc Harry! Ale Nejprve jsem musel kombinovat oba programy. Nyní se os.system (" sudo python Scale3.py ") jednoduše restartuje na začátku programu Scale3.py, což je v pořádku. Myslím, že import Scale3.py bude také fungovat. Nezkoušel jsem ' subproces, vypadá to zajímavě a je to pravděpodobně něco, co se musím naučit .
  • os.system() byl vykreslen ve prospěch subprocess, viz stackoverflow.com/a/4256153/4212158

odpověď

Obecně použijte podproces modul

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

pro volání příkazového řádku.

Příklad zpracování výsledku volání podprocesu;

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

Podproces nahrazuje několik starších modulů a funkcí, například os.system a os.spawn . Při dezinfekci argumentů odvádí dobrou práci, takže vás chrání před vložením shellu .

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

Ke spuštění druhého skriptu pythonu není samozřejmě potřeba volání CLI, můžete je importovat.

Komentáře

  • Snažím se ' naučit se vydávat příkazy ze skriptu Pythonu (viz zde a zde ) a mají nějaké problémy. Zajímalo by mě, jestli subprocess může být lepší i v mém případě.

Odpověď

Sudo můžete použít, jak navrhl Harry sib, ale do souboru sudoers byste museli přidat uživatele, který spouští první skript .

Nejlepší způsob, jak spustit skript pythonu z jiného skriptu pythonu, je importovat ho. Logiku skriptu byste měli mít v metodě ve druhém skriptu:

 # 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() 

Komentáře

  • +1, protože python je toho schopen, bude to cleanest odpověď.
  • +1 , toto je správný způsob, jak dělat to, co OP chce, a pravděpodobně by to měla být přijatá odpověď.

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *