Jeg bruker to separate skript, Scale1.py
og Scale2.py
div For å kjøre dem skriver jeg inn sudo python Scale1.py
eller sudo python Scale2.py
fra terminalens kommandolinje. Jeg vil gjerne ha en linje i Scale2.py
skript der hvis jeg trykker på en knapp, går programmet i stykker og kjører Scale1.py
. Noe som dette, som ikke fungerer.
if GPIO.input(23) == False: break(sudo python Scale1.py)
Svar
os.system("sudo python scale1.py")
først må du importere os-modulen
import os
Jeg har ikke en pi med min minibank for å teste, men dette kommer fra det andre svaret på dette spørsmålet: https://stackoverflow.com/questions/89228/calling-an-external-command-in-python
Kommentarer
Svar
Bruk generelt underprosess -modul
subprocess.call(["sudo","python","scale1.py"])
for kommandolinjeanrop.
Et eksempel som behandler resultatet av en underprosessanrop;
result = subprocess.check_output(["sudo","service","mpd","restart"])
Underprosess erstatter flere eldre moduler og funksjoner, som os.system og os.spawn . Det gjør en god jobb med å desinfisere argumenter, så det beskytter deg mot skallinjeksjon .
https://docs.python.org/2/library/subprocess.html
For å kjøre et annet python-skript er det ikke behov for CLI-anrop, du kan importere dem.
Kommentarer
Svar
Du kan bruke sudo som Harry sib antydet, men du må legge til brukeren som kjører det første skriptet til sudoers-filen .
Den beste måten å kjøre et pythonscript fra et annet pythonscript er å importere det. Du bør ha logikken til skriptet ditt i en metode i det andre 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, Siden python er i stand til dette, vil det være
cleanest
svaret. - +1 , dette er den riktige måten å gjøre det OP-en ønsker og burde sannsynligvis være det aksepterte svaret.
os.system()
har blitt avskrevet til fordel forsubprocess
, se stackoverflow.com/a/4256153/4212158