Hoe voer ik een opdrachtregelopdracht uit in een Python-script?

Ik gebruik 2 aparte 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 willen hebben in de Scale2.py script waarin als ik op een knop druk, het programma wordt afgebroken en Scale1.py wordt uitgevoerd. Iets dergelijks, dat niet werkt.

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

Antwoord

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

eerst moet u de os-module importeren

import os

Ik heb geen pi met mij atm om te testen, maar dit komt van het tweede antwoord op deze vraag: https://stackoverflow.com/questions/89228/calling-an-external-command-in-python

Reacties

  • Dit is wat ik heb geprobeerd en het werkte, heel erg bedankt Harry! Maar Ik moest eerst beide programmas combineren. Nu start het os.system (" sudo python Scale3.py ") gewoon opnieuw op bij het begin van het Scale3.py-programma, wat prima is. Ik denk dat het importeren van Scale3.py ook zal werken. Ik heb ' geen subproces geprobeerd, het ziet er interessant uit en is waarschijnlijk iets dat ik moet leren .
  • os.system() is opgeheven ten gunste van subprocess, zie stackoverflow.com/a/4256153/4212158

Antwoord

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 = subprocess.check_output(["sudo","service","mpd","restart"]) 

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

Om een tweede Python-script uit te voeren, is er natuurlijk geen CLI-aanroep nodig, je kunt deze importeren.

Opmerkingen

  • Ik ' m probeer te leren hoe commandos te geven vanuit een Python-script (zie hier en hier ) en problemen ondervinden. Ik vraag me af of subprocess misschien ook beter is in mijn geval.

Antwoord

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-script vanuit een ander python-script uit te voeren, is door het te importeren. Je zou de logica van je script in een methode in het tweede script moeten hebben:

 # 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() 

Reacties

  • +1, aangezien Python hiertoe in staat is, zal dit het cleanest antwoord zijn.
  • +1 , dit is de juiste manier om te doen wat het OP wil en zou waarschijnlijk het geaccepteerde antwoord moeten zijn.

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *