Hey
Kann man durch Python ein Programm öffnen lassen und den Pfad des Programs angeben?
Wenn ja wie?
Thx+MfG Jan
Durch Python ein Programm öffnen lassen
Code: Alles auswählen
import os
os.system("/path/to/your/program -with -options")
@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.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.
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.
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.problembär hat geschrieben:Code: Alles auswählen
import os os.system("/path/to/your/program -with -options")
Insbesondere dann, wenn der kanonische und neuere Weg weniger Lernaufwand bedeutet und nicht mehr!/me hat geschrieben: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.problembär hat geschrieben:Code: Alles auswählen
import os os.system("/path/to/your/program -with -options")
Wenn das Programm eine Konsolenapp ist, kann man auch noch die Ausgaben weiterverwerten:
mfg, Tom
Code: Alles auswählen
outputstr = subprocess.Popen([<programm>, <options>], stdout=subprocess.PIPE).communicate()[0]
@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:
@1997Jan: Zur Vollständigkeit, so sieht die Verwendung des "subprocess"-Moduls aus:
Der Vorteil an dieser Lösung ist unter anderem, dass Du problemlos Dateinamen mit Leerzeichen verwenden kannst.
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.The subprocess module provides more powerful facilities for spawning new processes and retrieving their results; using that module is preferable to using this function.
@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'])
@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.
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.