Seite 1 von 1
Durch Python ein Programm öffnen lassen
Verfasst: Sonntag 4. Dezember 2011, 17:57
von 1997Jan
Hey
Kann man durch Python ein Programm öffnen lassen und den Pfad des Programs angeben?
Wenn ja wie?
Thx+MfG Jan
Re: Durch Python ein Programm öffnen lassen
Verfasst: Sonntag 4. Dezember 2011, 18:31
von lunar
Lies die Dokumentation zum "subprocess"-Modul in der Standardbibliothek.
Re: Durch Python ein Programm öffnen lassen
Verfasst: Sonntag 4. Dezember 2011, 20:22
von problembär
Code: Alles auswählen
import os
os.system("/path/to/your/program -with -options")
"subprocess" wird hier zwar dauernd empfohlen, aber man braucht es nur, wenn man andere Prozesse über einen längeren Zeitraum steuern will. Wenn man nur mal schnell einen Shell-Befehl ausführen will, braucht man es nicht.
Re: Durch Python ein Programm öffnen lassen
Verfasst: Sonntag 4. Dezember 2011, 20:31
von lunar
@Problembär: Dieses „Argument“ kann man ebenso gut umdrehen: Man braucht "os.system()" nicht, um mal eben schnell einen Shell-Befehl auszuführen. "subprocess" ist einfacher und sicherer. Höre doch bitte auf, Hilfesuchende mit unsinnigen Ratschlägen in die Irre zu führen.
Re: Durch Python ein Programm öffnen lassen
Verfasst: Sonntag 4. Dezember 2011, 20:47
von problembär
lunar hat geschrieben:@Problembär: Dieses „Argument“ kann man ebenso gut umdrehen: Man braucht "os.system()" nicht, um mal eben schnell einen Shell-Befehl auszuführen. "subprocess" ist einfacher und sicherer. Höre doch bitte auf, Hilfesuchende mit unsinnigen Ratschlägen in die Irre zu führen.
Das mache ich erst dann, wenn "os.system()" und "os.popen()" kein gültiges Python mehr sind, das heißt, wenn sie nicht mehr von Python zur Verfügung gestellt werden.
Ansonsten bestreite ich, daß es unsinnig sei, sie zu empfehlen und daß der Ratschlag in die Irre führe. Stattdessen fordere ich zu mehr Toleranz gegenüber Andersdenkenden auf.
Re: Durch Python ein Programm öffnen lassen
Verfasst: Sonntag 4. Dezember 2011, 20:49
von /me
problembär hat geschrieben:Code: Alles auswählen
import os
os.system("/path/to/your/program -with -options")
Wenn in der Dokumentation zu subprocess steht "This module intends to replace several other, older modules and functions, such as: os.system[...]", dann würde ich persönlich auch den kanonischen Weg mit subprocess gehen und vor allem würde ich anderen nicht zu den Techniken raten, die abgelöst werden sollen.
Re: Durch Python ein Programm öffnen lassen
Verfasst: Sonntag 4. Dezember 2011, 20:59
von bb1898
/me hat geschrieben:problembär hat geschrieben:Code: Alles auswählen
import os
os.system("/path/to/your/program -with -options")
Wenn in der Dokumentation zu subprocess steht "This module intends to replace several other, older modules and functions, such as: os.system[...]", dann würde ich persönlich auch den kanonischen Weg mit subprocess gehen und vor allem würde ich anderen nicht zu den Techniken raten, die abgelöst werden sollen.
Insbesondere dann, wenn der kanonische und neuere Weg weniger Lernaufwand bedeutet und nicht mehr!
Re: Durch Python ein Programm öffnen lassen
Verfasst: Sonntag 4. Dezember 2011, 21:06
von Tom_H
Wenn das Programm eine Konsolenapp ist, kann man auch noch die Ausgaben weiterverwerten:
Code: Alles auswählen
outputstr = subprocess.Popen([<programm>, <options>], stdout=subprocess.PIPE).communicate()[0]
mfg, Tom
Re: Durch Python ein Programm öffnen lassen
Verfasst: Sonntag 4. Dezember 2011, 21:09
von lunar
@problembär: Mit Toleranz hat diese Angelegenheit nichts zu tun. Es geht um die
rein technische Frage nach der Qualität einer Lösung, die in diesem Fall ziemlich einfach zu beantworten ist, da bereits die
Dokumentation der Standardbibliothek klare Worte spricht:
The subprocess module provides more powerful facilities for spawning new processes and retrieving their results; using that module is preferable to using this function.
Wenn Du ungeachtet dessen unfähig zur Einsicht bist, dann unterlasse Hinweise auf eine veraltete und überholte Lösung wenigstens aus Höflichkeit und Respekt gegenüber dem Hilfesuchenden, der sicherlich eine gute und sinnvolle Antwort erwartet.
@1997Jan: Zur Vollständigkeit, so sieht die Verwendung des "subprocess"-Moduls aus:
Code: Alles auswählen
import subprocess
subprocess.call(['/Pfad/zum/Program', '-option1', '-option2'])
Der Vorteil an dieser Lösung ist unter anderem, dass Du problemlos Dateinamen mit Leerzeichen verwenden kannst.
Re: Durch Python ein Programm öffnen lassen
Verfasst: Sonntag 4. Dezember 2011, 23:33
von jerch
@problembär:
Du kannst für Subprozesse auch os.fork() und eine der os.exec....()-Varianten bzw. unter Windows CreateProcess() nutzen. Ist auch gültiges Python. Sollte man es deshalb benutzen? Ohne guten Grund eher nein. Ein guter Grund wäre, dass man einen sehr speziellen Fall der Prozessgenerierung braucht, der von subprocess nicht abgebildet wird. Und subprocess lässt da fast keine Wünsche offen, abstrahiert zusätzlich die Plattformunabhängigkeit und kümmert sich um sowas wie Ein-/Ausgabeumleitung.
Im Falle von os.system() ist es so, dass der User, der häufig gar keine Shellumgebung braucht, an dieser nicht vorbei kommt, und der system-Aufruf zusätzliche Einschränkungen hat, die unbedingt zu beachten sind.
Je weiter low-level man programmiert, umso besser sollte die Kenntnis um diese Einschränkungen/Besonderheiten sein. Um diese Fallstricke kümmert sich subprocess weitestgehend und ist daher für den "Jeden-Tag-Gebrauch" zu empfehlen. Dies gilt definitiv nicht für os.popen, os.system etc.
Ich finde es sehr schade, dass Du Deinen "Ich bin dagegen"-Feldzug wider aller Hinweise in den Dokus und besseren Wissens (unterstelle ich) auf dem Rücken Unbedarfter, die wirklich auf die Hilfe angewiesen sind, hier austrägst.