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

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.
E1sbaer
User
Beiträge: 9
Registriert: Donnerstag 26. April 2007, 08:57

Donnerstag 26. April 2007, 09:03

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
george
User
Beiträge: 109
Registriert: Mittwoch 11. Januar 2006, 20:28
Wohnort: Berlin

Donnerstag 26. April 2007, 09:18

Hey,

schau dir mal win32api.ShellExecute an

greets
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Donnerstag 26. April 2007, 10:08

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
:-)
[url]http://halvar.at[/url] | [url=http://halvar.at/elektronik/kleiner_bascom_avr_kurs/]Kleiner Bascom AVR Kurs[/url]
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Donnerstag 26. April 2007, 19:28

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.
E1sbaer
User
Beiträge: 9
Registriert: Donnerstag 26. April 2007, 08:57

Dienstag 1. Mai 2007, 18:14

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
Benutzeravatar
Sr4l
User
Beiträge: 1091
Registriert: Donnerstag 28. Dezember 2006, 20:02
Wohnort: Kassel
Kontaktdaten:

Dienstag 1. Mai 2007, 20:26

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
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 1. Mai 2007, 20:43

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")
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Dienstag 1. Mai 2007, 21:06

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:
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Dienstag 1. Mai 2007, 21:19

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''...
fbuchinger
User
Beiträge: 29
Registriert: Donnerstag 7. September 2006, 21:30

Dienstag 1. Mai 2007, 21:23

... 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.
Benutzeravatar
birkenfeld
Python-Forum Veteran
Beiträge: 1603
Registriert: Montag 20. März 2006, 15:29
Wohnort: Die aufstrebende Universitätsstadt bei München

Mittwoch 2. Mai 2007, 10:12

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...)
Dann lieber noch Vim 7 als Windows 7.

http://pythonic.pocoo.org/
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Mittwoch 2. Mai 2007, 18:06

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
lunar

Mittwoch 2. Mai 2007, 18:37

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.
E1sbaer
User
Beiträge: 9
Registriert: Donnerstag 26. April 2007, 08:57

Montag 7. Mai 2007, 17:47

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
Benutzeravatar
BlackVivi
User
Beiträge: 762
Registriert: Samstag 9. Dezember 2006, 14:29
Kontaktdaten:

Montag 7. Mai 2007, 18:38

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 ^__^
Antworten