Hur kör jag ett kommandoradskommando i ett Python-skript?

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

  • Det här är vad jag försökte och det fungerade, tack så mycket Harry! Men Jag var tvungen att kombinera båda programmen först. Nu startar os.systemet (" sudo python Scale3.py ") i början av Scale3.py-programmet, vilket är bra. Jag tror att import Scale3.py också kommer att fungera. Jag ' t försökte delprocess, det ser intressant ut och är nog något jag behöver lära mig .
  • os.system() har tagits bort till förmån för subprocess, se stackoverflow.com/a/4256153/4212158

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

  • Jag ' jag försöker lära mig att utfärda kommandon från ett Python-skript (se här och här ) och har några problem. Jag undrar om subprocess kan vara bättre i mitt fall också.

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.

Lämna ett svar

Din e-postadress kommer inte publiceras. Obligatoriska fält är märkta *