Code stuerzt ab nach os.chdir zum Start eines anderen Programms

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
3cosystem
User
Beiträge: 22
Registriert: Mittwoch 22. April 2020, 14:48

Hallo Leute,

ich verwende in meinem Code,

Code: Alles auswählen

os.chdir('D:/obs-studio/bin/64bit/')
os.system('D:/obs-studio/bin/64bit/obs64.exe')
,um OBS zu starten, weil man das nicht direkt ansprechen kann (Fehlermedungen, dass .inis fehlen)
Danach laeuft mein script aber nicht weiter. Schaetze ich muss zum Ursprungspfad zurueck, weil
python seine Wurzeln verloren hat? Wo koennte dieser allerdings sein?
Der Pfad zur Datei funktioniert auf jeden Fall nicht.
Oder kann man OBS auch von meinem Script loesend starten?
Mit sowas wie:

Code: Alles auswählen

os.execlp('D:/obs-studio/bin/64bit/obs64.exe', "notsleep")
Danach beendet sich mein script allerdings komplett....
Ich hoffe mir kann da jemand bitte weiterhelfen.

Ich bedanke mich recht herzlich im Voraus
LG
3cosystem
Sirius3
User
Beiträge: 18272
Registriert: Sonntag 21. Oktober 2012, 17:20

os.chdir darf man nie benutzen, weil das globalen Zustand ändert und zu unerwarteten Fehlern an anderer Stelle führen kann.
os.system sollte man nie verwenden, weil es zu low-level ist. Zum Starten von Programmen gibt es subprocess.run und das hat auch den Parameter cwd.

Code: Alles auswählen

subprocess.run(['D:/obs-studio/bin/64bit/obs64.exe'], cwd='D:/obs-studio/bin/64bit/')
3cosystem
User
Beiträge: 22
Registriert: Mittwoch 22. April 2020, 14:48

Hallo,

leider bringt auch dieser Befehl mein Gui und das Script zum freeze, egal an welche Stelle ich das schreibe...
Habs hiermit versucht, naja...

Code: Alles auswählen

command = subprocess.run(['D:/obs-studio/bin/64bit/obs64.exe'], cwd='D:/obs-studio/bin/64bit/')
 subprocess.check_output(command, shell=True)
Erst, wenn ich OBS schließe, gehts weiter...
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Natuerlich tut es das, run wartet ja auch explizit auf die Beendigung des gestarteten Programmes. Wenn du das anders haben willst, benutz subprocess.Popen, damit bekommst du eine Prozess-Instanz, die parallel laeuft. Den *output* bekommst du dann aber natuerlich auch nicht sofort. Beides geht nicht.

Die zweite Zeile ist Unfug. Bestenfalls doppelt-gemoppelt, aber vor allem kann sie nix mit dem Resultat der ersten anfangen.
3cosystem
User
Beiträge: 22
Registriert: Mittwoch 22. April 2020, 14:48

Wahnsinn, vielen Dank.
Jetzt laeufts wie Butter.
Das hat mir bestimmt weitere 3 h Austesten erspart...

Schoenen Abend noch!

LG
Antworten