Spørgsmål:
Hvordan kører jeg en kommandolinjekommando i et Python-script?
Rico
2014-05-21 05:30:48 UTC
view on stackexchange narkive permalink

Jeg bruger to separate scripts, Scale1.py og Scale2.py . For at køre dem indtaster jeg sudo python Scale1.py eller sudo python Scale2.py fra terminalens kommandolinje. Jeg vil gerne have en linje i Scale2.py scriptet, hvor programmet bryder og kører Scale1.py , hvis jeg trykker på en knap. Noget som dette, som ikke fungerer.

  hvis GPIO.input (23) == False: break (sudo python Scale1.py)  
Tre svar:
mrwhale
2014-05-21 11:01:07 UTC
view on stackexchange narkive permalink

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

først skal du importere OS-modulet

import OS

Jeg har ikke en pi med min pengeautomat til at teste, men dette kommer fra det andet svar på dette spørgsmål: https://stackoverflow.com/questions/89228/ kalder-en-ekstern-kommando-i-python

Dette er hvad jeg prøvede, og det fungerede, meget tak Harry! Men jeg var nødt til at kombinere begge programmer først. Nu starter os.system ("sudo python Scale3.py") simpelthen i starten af ​​Scale3.py-programmet, hvilket er fint. Jeg tror, ​​import Scale3.py også fungerer. Jeg prøvede ikke underproces, det ser interessant ud og er sandsynligvis noget, jeg har brug for at lære.
`os.system ()` er udfaset til fordel for `underproces`, se https://stackoverflow.com/a/4256153/4212158
Janghou
2014-05-22 15:08:31 UTC
view on stackexchange narkive permalink

Generelt skal du bruge subprocess modulet

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

til kommandolinjekald.

Et eksempel på behandling af resultatet af et underprocesopkald;

  resultat = underproces .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 shellinjektion .

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.

Jeg prøver at lære at udstede kommandoer fra et Python-script (se [her] (https://raspberrypi.stackexchange.com/q/80271/35753) og [her] (https: //raspberrypi.stackexchange. com / q / 80219/35753)) og har nogle problemer. Jeg spekulerer på, om 'underproces' måske også er bedre i mit tilfælde.
Gagaro
2014-05-21 12:39:32 UTC
view on stackexchange narkive permalink

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 en python på script fra et andet python-script er at importere det. Du skal have logik for dit script i en metode i det andet script:

 # Scale2.pydef run (): do_first () do_second () [...] # Kør det kun hvis det kaldes fra kommandolinje hvis __name__ == '__main__': run () 
 # Scale1.pyimport Scale2if (GPIO.input (23) == False): Scale2.run () 
+1, Da python er i stand til dette, vil det være det 'reneste' svar.
+1, dette er den rigtige måde at gøre, hvad OP ønsker, og burde sandsynligvis være det accepterede svar.


Denne spørgsmål og svar blev automatisk oversat fra det engelske sprog.Det originale indhold er tilgængeligt på stackexchange, som vi takker for den cc by-sa 3.0-licens, den distribueres under.
Loading...