Jag använder två separata skript, Scale1.py
och Scale2.py
. För att köra dem anger jag sudo python Scale1.py
eller sudo python Scale2.py
från terminalens kommandorad. Jag vill ha en rad i Scale2.py
skript där jag trycker på en knapp bryts programmet och kör Scale1.py
. Något liknande här, som inte fungerar.
if GPIO.input(23) == False: break(sudo python Scale1.py)
Svar
os.system("sudo python scale1.py")
först måste du importera os-modulen
import os
Jag har inte ett pi med min bankomat för att testa, men det här kommer från det andra svaret på denna fråga: https://stackoverflow.com/questions/89228/calling-an-external-command-in-python
Kommentarer
Svar
Använd i allmänhet underprocess -modul
subprocess.call(["sudo","python","scale1.py"])
för kommandoradsanrop.
Ett exempel som behandlar resultatet av ett underprocessanrop;
result = subprocess.check_output(["sudo","service","mpd","restart"])
Underprocess ersätter flera äldre moduler och funktioner, som os.system och os.spawn . Det gör ett bra jobb med att sanera argument, så det skyddar dig från skalinjektion .
https://docs.python.org/2/library/subprocess.html
För att köra ett andra pythonscript är det naturligtvis inget behov av CLI-samtal, du kan importera dem.
Kommentarer
Svar
Du kan använda sudo som Harry sib föreslog, men du måste lägga till användaren som kör det första skriptet till sudoers-filen .
Det bästa sättet att köra ett pythonscript från ett annat pythonscript är att importera det. Du bör ha logiken för ditt skript i en metod i det andra skriptet:
# 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()
Kommentarer
- +1, Eftersom python kan detta, blir det
cleanest
svaret. - +1 , detta är det rätta sättet att göra vad OP vill ha och borde antagligen vara det accepterade svaret.
os.system()
har tagits bort till förmån försubprocess
, se stackoverflow.com/a/4256153/4212158