Hvordan kører jeg en kommandolinjekommando i et Python-script?

Jeg bruger 2 separate scripts, Scale1.py og Scale2.pysudo python Scale1.py eller sudo python Scale2.py fra terminalens kommandolinje. Jeg vil gerne have en linje i Scale2.py script, hvor hvis jeg trykker på en knap, bryder programmet og kører Scale1.py. Noget som dette, der ikke fungerer.

 if GPIO.input(23) == False: break(sudo python Scale1.py)  

Svar

os.system("sudo python scale1.py")

først skal du importere OS-modulet

import os

Jeg har ikke en pi med min pengeautomat for at teste, men dette kommer fra det andet svar på dette spørgsmål: https://stackoverflow.com/questions/89228/calling-an-external-command-in-python

Kommentarer

  • Dette er hvad jeg prøvede, og det fungerede, mange tak Harry! Men Jeg var nødt til at kombinere begge programmer først. Nu starter os.systemet (" sudo python Scale3.py ") i starten af Scale3.py-programmet, hvilket er fint. Jeg tror, import Scale3.py også fungerer. Jeg ' forsøgte ikke underprocessen, det ser interessant ud og er sandsynligvis noget, jeg har brug for at lære .
  • os.system() er blevet frataget til fordel for subprocess, se stackoverflow.com/a/4256153/4212158

Svar

Generelt skal du bruge underproces modul

subprocess.call(["sudo","python","scale1.py"]) 

til kommandolinjekald.

Et eksempel på behandling af resultatet af et underprocesopkald;

 result = subprocess.check_output(["sudo","service","mpd","restart"]) 

Underproces erstatter flere ældre moduler og funktioner, som os.system og os.spawn . Det gør et godt stykke arbejde med at desinficere argumenter, så det beskytter dig mod skalinjektion .

https://docs.python.org/2/library/subprocess.html

For at køre et andet python-script er der naturligvis ikke behov for CLI-opkald, du kan importere dem.

Kommentarer

  • I ' Jeg prøver at lære at udstede kommandoer fra et Python-script (se her og her ) og har nogle problemer. Jeg spekulerer på, om subprocess måske også er bedre i mit tilfælde.

Svar

Du kan bruge sudo som foreslået af Harry sib, men du bliver nødt til at tilføje brugeren, der kører det første script til sudoers-filen .

Den bedste måde at køre et python-script fra et andet python-script er at importere det. Du skal have logikken til dit script i en metode i det andet script:

 # 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, Da python er i stand til dette, vil det være cleanest svaret.
  • +1 , dette er den korrekte måde at gøre, hvad OP ønsker, og burde sandsynligvis være det accepterede svar.

Skriv et svar

Din e-mailadresse vil ikke blive publiceret. Krævede felter er markeret med *