Hvordan kjører jeg en kommandolinjekommando i et Python-skript?

Jeg bruker to separate skript, Scale1.py og Scale2.pysudo 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

  • Dette prøvde jeg og det fungerte, tusen takk Harry! Men Jeg måtte kombinere begge programmene først. Nå starter os.system (" sudo python Scale3.py ") bare i begynnelsen av Scale3.py-programmet, noe som er greit. Jeg tror import Scale3.py også vil fungere. Jeg ' t prøvde underprosess, det ser interessant ut og er sannsynligvis noe jeg trenger å lære .
  • os.system() har blitt avskrevet til fordel for subprocess, se stackoverflow.com/a/4256153/4212158

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

  • Jeg ' Jeg prøver å lære å utstede kommandoer fra et Python-skript (se her og her ) og har noen problemer. Jeg lurer på om subprocess kan være bedre i mitt tilfelle også.

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.

Legg igjen en kommentar

Din e-postadresse vil ikke bli publisert. Obligatoriske felt er merket med *