Seite 1 von 1

Wie rufe ich aus python andere Programme auf (Windows)?

Verfasst: Donnerstag 26. April 2007, 09:03
von E1sbaer
Hallo!

Ich möchte mit einer kleinen Oberfläche auch andere Programme aufrufen. Wo muss ich dafür nachschauen?

aufruf und ausführen helfen nicht weiter als Keywords und was passenderes ist mir noch nicht eingefallen.

Hoffe es gibt ne Möglichkeit und jemand kann mir helfen :)

LG
Bär

Verfasst: Donnerstag 26. April 2007, 09:18
von george
Hey,

schau dir mal win32api.ShellExecute an

greets

Re: Wie rufe ich aus python andere Programme auf (Windows)?

Verfasst: Donnerstag 26. April 2007, 10:08
von gerold
E1sbaer hat geschrieben:andere Programme aufrufen
Hallo Bär!

Dafür wurde das Modul "subprocess" geschaffen.

Siehe:
- http://docs.python.org/lib/module-subprocess.html
- [wiki=Neue Features#Subprocess]Wiki: Subprocess[/wiki]

mfg
Gerold
:-)

Verfasst: Donnerstag 26. April 2007, 19:28
von Sr4l
es gibt natürlich auch noch die möglichkeit.

Code: Alles auswählen

import os

os.system("C:\Programme\PROGRAMMEFOLDER\Pro.exe")
mit os.system kann beliebige befehle ausführen. Sie blocken aber das Pythonprogramm bis es beendet wird.

Verfasst: Dienstag 1. Mai 2007, 18:14
von E1sbaer
Hallo!

Mit dem letzten Beispiel hier wird bei mir nun wirklich ein Programm gestartet, allerdings erscheint eine Eingabeaufforderung und die bleibt auch. Gibts nen Weg das man es ohne die starten kann?


Und wo liegt das Problem, wenn ich das hier versuche?

Code: Alles auswählen

os.system("C:\Programme\Windows Media Player\wmplayer.exe")
Da seh ich dann nur ganz kurz ein Fenster auf gehen und dann schließt es sich wieder... In der Verknüpfung auf dem Desktop ist beim Programmaufruf noch ein Parameter mit angegeben:
"C:\Programme\Windows Media Player\wmplayer.exe" /prefetch:1
Muss ich den Parameter mit angeben? Eigentlich nicht oder? Wenn ich es über die Eingabeaufforderung mit
C:\Programme\Windows Media Player\wmplayer.exe
aufrufe gehts ohne Probleme. Liegt es vielleicht an den Leerzeichen im Verzeichnissnamen?

Mfg Bär

Verfasst: Dienstag 1. Mai 2007, 20:26
von Sr4l
Leerzeichen machen manchmal Probleme aber dein Problem verstehe ich nicht.

Das Problem an os.system ist das es solange dein Python Programm "einfriert" bis du das aufgerufene Programm schließt

Verfasst: Dienstag 1. Mai 2007, 20:43
von Leonidas
E1sbaer hat geschrieben:Und wo liegt das Problem, wenn ich das hier versuche?

Code: Alles auswählen

os.system("C:\Programme\Windows Media Player\wmplayer.exe")
Löst zwar dein Problem nicht, aber ich gebe die mal trotzdem einen Tipp: Prade unter Windows die in "normale" Strings packen, sonst könnten Escape-Sequenzen wie ``\t`` oder ``\b`` ausgeführt werden. Deshalb solltest du entweder die Strings escapen

Code: Alles auswählen

os.system("C:\\Programme\\Windows Media Player\\wmplayer.exe")
oder, noch besser, sie als Raw-Strings markieren, in denen Escape-Sequenzen nicht ausgewertet werden:

Code: Alles auswählen

os.system(r"C:\Programme\Windows Media Player\wmplayer.exe")

Verfasst: Dienstag 1. Mai 2007, 21:06
von Rebecca
E1sbaer hat geschrieben:Da seh ich dann nur ganz kurz ein Fenster auf gehen und dann schließt es sich wieder...
Wer ist eigentlich auf diese *daemliche* Idee gekommen, dass sich die DOS-Box sofort nach Beenden des Programmes wieder schliesst? Was wuerde uns das fuer Fragen ersparen, wenn die Leute stattdessen sehen koennten, was das Programm tut... :roll:

Verfasst: Dienstag 1. Mai 2007, 21:19
von BlackVivi
Rebecca hat geschrieben:
E1sbaer hat geschrieben:Da seh ich dann nur ganz kurz ein Fenster auf gehen und dann schließt es sich wieder...
Wer ist eigentlich auf diese *daemliche* Idee gekommen, dass sich die DOS-Box sofort nach Beenden des Programmes wieder schliesst? Was wuerde uns das fuer Fragen ersparen, wenn die Leute stattdessen sehen koennten, was das Programm tut... :roll:
Das frag ich mich jeden Tag oO''...

Schließende DOS-Fenster

Verfasst: Dienstag 1. Mai 2007, 21:23
von fbuchinger
... das rührt von der Unsitte her, Python-Programme per Doppelklick zu starten.

Es gibt zwar den berühmten

Code: Alles auswählen

raw_input()
-Trick, aber der hilft auch nur, wenn das Programm fehlerfrei ist.

Verfasst: Mittwoch 2. Mai 2007, 10:12
von birkenfeld
Rebecca hat geschrieben: Wer ist eigentlich auf diese *daemliche* Idee gekommen, dass sich die DOS-Box sofort nach Beenden des Programmes wieder schliesst? Was wuerde uns das fuer Fragen ersparen, wenn die Leute stattdessen sehen koennten, was das Programm tut... :roll:
Früher, bei Windows 95, war das doch noch nicht so, oder täusche ich mich da? (Ich habe es so im Kopf, dass dann "Zum Beenden schließen" in der Titelleiste stand...)

Verfasst: Mittwoch 2. Mai 2007, 18:06
von Leonidas
birkenfeld hat geschrieben:Früher, bei Windows 95, war das doch noch nicht so, oder täusche ich mich da? (Ich habe es so im Kopf, dass dann "Zum Beenden schließen" in der Titelleiste stand...)
Hmm, bei MS-DOS-Programmen bestimmt, aber ob das bei Win32-Programmen war, weiß ich nicht mehr so genau. Irgendwann sind die Boxen dann zugegangen, aber kann auch sein, dass das was damit zu tun hat, dass ich keine DOS-Programme mehr eingesetzt habe.

Die Linux-DEs machens ja so, dass das Programm gestartet wird, aber ohne Konsole. Blöd nur, wenn es eine Ausgabe hat.

Verfasst: Mittwoch 2. Mai 2007, 18:37
von lunar
Die Linux-DEs machens ja so, dass das Programm gestartet wird, aber ohne Konsole. Blöd nur, wenn es eine Ausgabe hat.
Aber man kann sie ja über die Konsole starten. Außerdem geben Linux-Programme dann was aus... während Windows-Anwendung sich stillschweigend verabschieden.

Verfasst: Montag 7. Mai 2007, 17:47
von E1sbaer
Leonidas hat geschrieben:
E1sbaer hat geschrieben:Und wo liegt das Problem, wenn ich das hier versuche?

Code: Alles auswählen

os.system("C:\Programme\Windows Media Player\wmplayer.exe")
Löst zwar dein Problem nicht, aber ich gebe die mal trotzdem einen Tipp: Prade unter Windows die in "normale" Strings packen, sonst könnten Escape-Sequenzen wie ``\t`` oder ``\b`` ausgeführt werden. Deshalb solltest du entweder die Strings escapen

Code: Alles auswählen

os.system("C:\\Programme\\Windows Media Player\\wmplayer.exe")
oder, noch besser, sie als Raw-Strings markieren, in denen Escape-Sequenzen nicht ausgewertet werden:

Code: Alles auswählen

os.system(r"C:\Programme\Windows Media Player\wmplayer.exe")

Also ich hab das nun mal getestet und leider klappt das dennoch nicht mit dem Starten von Programmen, die in Ordnern liegen die Leerzeichen im Namen tragen. Es geht auch nicht Programme zu öffnen die mehr als 8 Zeichen im Namen haben.
Muss ich es vielleicht mit der anderen Schreibweise von damals versuchen:
Eigene~1
oder so ähnlich? Das versuch ich gleich noch mal.
edit:
ja das hilft! Also einfach bei Dateinamen die länger sind als 8 Zeichen nach dem 6. abscheiden und dann ~1 dranhängen. Umlaute muss man auch in den ersten 6 Zeichen ersetzen, da weiß ich aber gerade nciht mehr genau wie.


Und dann hab ich halt, wenn ich die Programme einfach umbenenne und in "besser" benannte Ordner stecke das Problem dass die Dosbox mit aufgeht, was ich nicht gern sehen will. Wäre aber nicht so schlimm wenn ich die auszuführenden Programme automatisch im Vollbild starten könnte. Hat da einer ne Ahnung?

LG Bär

Verfasst: Montag 7. Mai 2007, 18:38
von BlackVivi
Falsch. Du darfst niemals vergessen, dass os.system genau das ausführt, was cmd auch machen würde. Geb mal bei cmd genau

C:\Programme\Windows Media Player\wmplayer.exe

ein. Wird nicht klappen... Wieso?... Da fehlen die Anführungszeichen! Ganz einfach.

"C:\Programme\Windows Media Player\wmplayer.exe"

So würde das Programm unter cmd klappen. Also probieren wir mal diesen Code:

Code: Alles auswählen

import os
os.system(r'"C:\Programme\Windows Media Player\wmplayer.exe"')
Und wie durch Zauberhand, es funktioniert. Kein Problem... so gehen auch lange Dateinamen ohne Probleme ^__^

Verfasst: Montag 7. Mai 2007, 20:32
von E1sbaer
Na bei dir sind jetzt auch ' ' die fehlten mir vorher ja ;)

Und so falsch ist das doch nicht was ich geschrieben habe, es geht doch wirklich! Und eben weil ich es in der cmd ohne " " ausführen kann.

Aber Danke!