Liebe PIler,
eine Frage: Wie ist es möglich in einem Python Script ein anderes Python Script zu starten und später auch dieses wieder zu killen?
Beste Grüße,
Margaroth
Liebe PIler,
eine Frage: Wie ist es möglich in einem Python Script ein anderes Python Script zu starten und später auch dieses wieder zu killen?
Beste Grüße,
Margaroth
Via Python andere Scripte starten und beenden? Schau mal ob du hier fündig wirst!
zB mit '''subprocess.Popen'''
Lieber bootsmann,
Ich bin noch relativ neu im Python, aber verstehe ich das richtig dass man das in etwa so tun soll?
Starten des Programms lichterkette.py im Stammverzeichnis:
Schließen des Programms lichterkette.py:
Wenn das funktionieren würde, wäre das klasse! Ich checke das mal!
@BillieJoel, so einfach scheint es leider nicht zu sein. Da scheint die Syntax nicht zu stimmen.
Error:
Bitte benutzt immer vollständige Pfade zu euren Scripts/Programmen.
lichterkette.py wird ja irgendwo liegen - gebt den Befehl pwd ein und euch wird der aktuelle Pfad in dem ihr euch befindet angezeigt...
Dann hat der Benutzer kein Recht die Datei zu lesen oder auszuführen (bitte nutzt einen Translator -> Permission denied -> Zugriff verweigert)
In dem Fall würde ich aber mal vermuten das die Datei nicht ausführbar ist, also wäre das einfachste den Interpreter mit an zu geben bzw das Script an diesen zu übergeben - oder die Datei ausführbar zu machen.
Aber ich kann doch über Terminal mein Script starten, das funktioniert einwandfrei:
Ist da python der Interpreter? Wie gebe ich den denn mit im subprocess mit an?
Aber ich kann doch über Terminal mein Script starten, das funktioniert einwandfrei:
Ja weil du da das Script an den Interpreter python übergibst.. Dann spielt es keine Rolle ob die Datei ausführ-Rechte hat und ein Shebang gesetzt ist
Und bei subprocess am besten auch den vollständigen Pfad zum Interpreter angeben, rauszufinden mit: which python
Den Pfad habe ich implementiert.
Aber die Syntax vom subprocess ist doch nicht wirklich korrekt, oder?
Durch das Komma trenne ich doch die Argumente des Subprocesses. Und nach dem ersten Komma ist dort ja buffsize als Integer. Und nicht der Pfad zum Programm wie hier... Und in der Doku sehe ich auch keine PLatz, an den man den Interpreter eintragen kann?
import subprocess
import time
cmd = 'python test_1.py'
#sub = subprocess.Popen(['python', 'test_1.py'], stdout=subprocess.PIPE) #.communicate()
sub = subprocess.Popen(cmd, stdout=subprocess.PIPE)
sub
time.sleep(5)
sub.kill()
Gedanken würde ich mir eher über die Programmlogik machen und was für einen Sinn es hat, zwei unabhängige Programme zu schreiben und dieses mittels ''subprocess'' zu starten und zu killen. Ein Programm, in dem geregelt wird, wie, wann und warum die Lichterkette angeht und beendet wird.
Edit:
oder du schreibst dein "Lichterkette"-Programm so um, so dass du das Programm in dein Hauptprogramm importieren kannst um es von dort aus zu steuern. Ich an deiner Stelle würde Abstand von ''subprocess'' nehmen für dein Anliegen. Besser zu postest hier den Code der Lichterkette.
Ah das klärt einiges
Wieso wird es das nicht geben? :O Den Pfad habe ich doch von "which python" bekommen?
Liegt es daran, dass ich nun folgenden Fehler bekomme?
File "starttest.py", line 9, in <module>
p = subprocess.Popen(['/user/bin/python', 'root/relais.py'])
File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
errread, errwrite)
File "/usr/lib/python2.7/subprocess.py", line 1259, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
Guck mal bitte genau auf die Ausgabe von which python
Es wird mit absoluter Sicherheit nicht /user/ lauten sondern /usr/
Ohje, klar - das ist usr!
bootsmann, vielen Dank dafür! Das funktioniert einwandfrei! Danke Euch beiden! Und einen schönen Tag noch!
Nur zum Verständnis: (OT)
Wenn ich mich dazu entscheide, dass ich das alles wirklich in einem(!), wie oben schon angesprochen, Programm abwickele - kann ich den subprocess global ansteuern?
Nur zum Verständnis: (OT)
Wenn ich mich dazu entscheide, dass ich das alles wirklich in einem(!), wie oben schon angesprochen, Programm abwickele - kann ich den subprocess global ansteuern?
Nein, dann gibt es kein subprocess mehr. Im Programm würden dann Funktionen stehen, welche aufgerufen werden etc...[/code]
Alles klar, vielen lieben Dank!
Ich freu mich auf eine schöne Zeit in dieser Community - ihr habt mir jetzt schon sehr geholfen!
Hallo Community,
in allen meinen Python scripts steht immer in der ersten Zeile, ohne Ausnahme:
Wenn lichterkette.py im selben Verzeichnis steht wie das auzuführende Script,
dann rufe ich lichterkette.py mit
auf. Merke: "./"
Allerdings ist das Aufrufen eines Python Scripts in dieser Form absolut "unpythonisch".
Eleganter (= im Sinne von Python) wird es mit
Das setzt allerdings voraus, dass licherkette.py strukturiert programmiert ist. Das heißt, es gibt eine oder mehrere Funktionen in lichterkette.py die man nutzen möchte/kann. Wenn man lichterkette.py als eigenständiges Skript trotzdem ausführen können möchte, kein Problem.
Ist imho überhaupt nicht kompliziert, schaut mal in der Python Dokumentation unter "modules" nach.
Hallo Community,in allen meinen Python scripts steht immer in der ersten Zeile, ohne Ausnahme:
Wenn lichterkette.py im selben Verzeichnis steht wie das auzuführende Script,
dann rufe ich lichterkette.py mit
Das funktioniert aber nur wenn die Datei Ausführrechte hat (chmod +x)
auf. Merke: "./"
Besser wäre auch hier den vollständigen Pfad zum Script anzugeben, dann kann man auf den Punkt auch verzichten (der Punkt bezieht sich aufs aktuelle Verzeichnis, siehe dazu auch die am Anfang der Ausgabe von ls -la -> "." ist das aktuelle Verzeichnis und ".." das übergeordnete.)
Allerdings ist das Aufrufen eines Python Scripts in dieser Form absolut "unpythonisch".
Eleganter (= im Sinne von Python) wird es mit
Das setzt allerdings voraus, dass licherkette.py strukturiert programmiert ist. Das heißt, es gibt eine oder mehrere Funktionen in lichterkette.py die man nutzen möchte/kann. Wenn man lichterkette.py als eigenständiges Skript trotzdem ausführen können möchte, kein Problem.
Ist imho überhaupt nicht kompliziert, schaut mal in der Python Dokumentation unter "modules" nach.
Das import alleine führt aber noch nichts aus, sondern erst ein Aufruf der darin befindlichen Anweisungen/Funktionen aka ' def '
Der Post hat mir gerade in meiner Verzweiflung weitergeholfen. Jedoch fehlt noch ein Puzzelteil Maigrafd vielleicht kannst du mir da geziehlt weiterhelfen. Meld dich mal per PM bei mir
Da ich auch gerade an dem Subprocess.Popen Ding gestoßen bin hab ich gerade ein Problem entdeckt.
Und zwar das die Motoren des Roboters weiter mit Strom versorgt werden aber nicht weiter mehr vom process gesteuert werden.
Wenn mein Subprocess Popen aktiv läuft dann werden die ganze Zeit die GPIO´s von Raspi gesteuert. Wie kann ich es aber hinbiegen das die GPIO´s beim beenden des Subprocess wieder auf false gestellt werden.
Ist das dieser GPIO Cleanup befehl in dem Subprocess Script ??
MFG Zappel
Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!