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
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
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ěď.
os.system()
byl vykreslen ve prospěchsubprocess
, viz stackoverflow.com/a/4256153/4212158