Vraag:
Hoe voer ik een opdrachtregelopdracht uit in een Python-script?
Rico
2014-05-21 05:30:48 UTC
view on stackexchange narkive permalink

Ik gebruik twee afzonderlijke scripts, Scale1.py en Scale2.py . Om ze uit te voeren voer ik sudo python Scale1.py of sudo python Scale2.py in vanaf de terminalopdrachtregel. Ik zou graag een regel in het Scale2.py -script willen hebben waarin als ik op een knop druk, het programma wordt afgebroken en Scale1.py wordt uitgevoerd. Zoiets als dit, wat niet werkt.

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

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

eerst moet u de os-module importeren

os importeren

Ik heb geen pi bij me om te testen, maar dit komt van het tweede antwoord op deze vraag: https://stackoverflow.com/questions/89228/ aanroepen-een-extern-commando-in-python

Dit is wat ik heb geprobeerd en het werkte, heel erg bedankt Harry! Maar ik moest eerst beide programma's combineren. Nu start het os.system ("sudo python Scale3.py") gewoon opnieuw op aan het begin van het Scale3.py-programma, wat prima is. Ik denk dat het importeren van Scale3.py ook zal werken. Ik heb het subproces niet geprobeerd, het ziet er interessant uit en is waarschijnlijk iets dat ik moet leren.
`os.system ()` is verouderd ten gunste van `subprocess`, zie https://stackoverflow.com/a/4256153/4212158
Janghou
2014-05-22 15:08:31 UTC
view on stackexchange narkive permalink

Gebruik in het algemeen de subproces module

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

voor command line calls.

Een voorbeeld van het verwerken van het resultaat van een subproces call;

  result = subproces .check_output (['sudo', 'service', 'mpd', 'herstart'])  

Subproces vervangt verschillende oudere modules en functies, zoals os.system en os.spawn . Het doet goed werk bij het opschonen van argumenten, dus het beschermt je tegen shell-injectie .

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

Natuurlijk is er geen CLI-aanroep nodig om een ​​tweede Python-script uit te voeren, deze kun je importeren.

Ik probeer te leren hoe ik commando's kan geven vanuit een Python-script (zie [hier] (https://raspberrypi.stackexchange.com/q/80271/35753) en [hier] (https: //raspberrypi.stackexchange. com / q / 80219/35753)) en hebben enkele problemen. Ik vraag me af of 'subproces' in mijn geval misschien ook beter is.
Gagaro
2014-05-21 12:39:32 UTC
view on stackexchange narkive permalink

Je kunt sudo gebruiken zoals Harry sib suggereerde, maar je zou de gebruiker die het eerste script uitvoert, moeten toevoegen aan het sudoers-bestand.

De beste manier om een ​​python uit te voeren script van een ander python-script is om het te importeren. Je zou de logica van je script in een methode in het tweede script moeten hebben:

 # Scale2.pydef run (): do_first () do_second () [...] # Voer het alleen uit als het vanuit het command lineif __name__ == '__main__': run () 
 # Scale1.pyimport Scale2if (GPIO.input (23) == False): Scale2.run () 
+1, aangezien python hiertoe in staat is, zal dit het `schoonste` antwoord zijn.
+1, dit is de juiste manier om te doen wat het OP wil en zou waarschijnlijk het geaccepteerde antwoord moeten zijn.


Deze Q&A is automatisch vertaald vanuit de Engelse taal.De originele inhoud is beschikbaar op stackexchange, waarvoor we bedanken voor de cc by-sa 3.0-licentie waaronder het wordt gedistribueerd.
Loading...