Auf Windows kommando zeile zugreifen

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.
Dango
User
Beiträge: 37
Registriert: Mittwoch 26. November 2008, 15:46
Kontaktdaten:

Liebe Leute vom Python-Forum,
ich entschuldige mich im voraus, wenn meine Frage richtig "blöd" sein sollte, ich habe aber leider meistens etwas hilfe nötig.
Meine Frage wäre da :kann man mit einem python befehl einen befehl an die Windows-Komanndizeile geben? Und wenn ja bitte kurz sagen wie...
Ich bedanke mich im Voraus schon sehr herzlich bei denen die Antworten
Viele Liebe Grüße
Dango
ACHTUNG ANFÄNGER!! Ich entschuldige mich im Voraus für dumme Fragen :-(
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

hallo Dango!

schau dir mal das modul ``subprocess`` an.

lg
roschi

PS: sowas wurde hier im forum schon oft gefragt -> http://www.python-forum.de/topic-13124.html
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Dango
User
Beiträge: 37
Registriert: Mittwoch 26. November 2008, 15:46
Kontaktdaten:

Vielen Dank für die schnelle und nette Antwort!
Welche funktion ist den nun die, wo man dann den Befehl für die Komanndozeile eingibt? Das wäre dann meine letzte Frage.
Ich bedanke mich im voraus für eine ebenso schnelle Antwort wie auf die Erste.
mit vielen Grüßen
Dango
ACHTUNG ANFÄNGER!! Ich entschuldige mich im Voraus für dumme Fragen :-(
Benutzeravatar
roschi
User
Beiträge: 225
Registriert: Samstag 29. März 2008, 18:58
Wohnort: Thueringen, Deutschland
Kontaktdaten:

[wiki]Neue Features#Subprocess[/wiki]

ich habe nicht umsonst auf den thread verwiesen...
[size=117]Fuer Alle, die in Python einsteigen wollen, kann ich das Buch [url=http://abop-german.berlios.de/]A Byte of Python[/url] nur waermstens empfehlen![/size]
Dango
User
Beiträge: 37
Registriert: Mittwoch 26. November 2008, 15:46
Kontaktdaten:

Oh, tut mir leid. Das hatte ich jetzt nicht ganz beachtet. Aber ich bin noch ein blutiger Anfänger: gibt es vielleicht jemand der mir erklären könnte wie man jetzt z.B. der Windows Kommandozeile den Befehl "cd C://" und dann z.B. "run example.exe" gitbt?
Ich bedanke mich im voraus für eine nette,knappe und Idiotenfeste Erklärung. Vielen Dank
Mit vielen Grüßen
Dango
ACHTUNG ANFÄNGER!! Ich entschuldige mich im Voraus für dumme Fragen :-(
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Und warum machst du das nicht per Python?

Code: Alles auswählen

import os
import subprocess

os.chdir("C:")
subprocess.call("example.exe")
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

cofi, subprocess kennt auch den Parameter ``cwd``, man braucht das Working Directory des Prozesses nicht zu ändern. Sollte man idR. auch nicht.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ah gut zu wissen ;) Hatte noch nicht die Gelegenheit `subprocess' zu benutzen.

Code: Alles auswählen

import subprocess
subprocess.call("example.exe", cwd="C:")
Dango
User
Beiträge: 37
Registriert: Mittwoch 26. November 2008, 15:46
Kontaktdaten:

Vielen Vielen Dank an Alle die mir so schnell geholfen haben.
Nach etwas rumprobieren fand ich heraus das ich eher die version mit os.chdir bevorzuge, denn i-wie will mein Python nicht ganz recht wenn ich ihm dur "cwd=" den pfad vorlege. Da meckert es dann immer rum das entweder der pfad ungültig ist, die datei fehlt u.s.w aber wenn ich es mit dem os modul mache dann ist alles im Lot.
nun ich bedanke mich bei dern Herren vielmals für die schnelle Hilfe
mit vielen Grüßen
Dango
ACHTUNG ANFÄNGER!! Ich entschuldige mich im Voraus für dumme Fragen :-(
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dango hat geschrieben:Nach etwas rumprobieren fand ich heraus das ich eher die version mit os.chdir bevorzuge, denn i-wie will mein Python nicht ganz recht wenn ich ihm dur "cwd=" den pfad vorlege. Da meckert es dann immer rum das entweder der pfad ungültig ist, die datei fehlt u.s.w
Zeig doch bitte mal den Code, denn die ``os.chdir()``-Lösung ist eine schlechte Idee die dir möglicherweise an anderer Stelle Probleme bereiten wird.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Dango
User
Beiträge: 37
Registriert: Mittwoch 26. November 2008, 15:46
Kontaktdaten:

Also die nun zum erfolg geführt hat war folgende:

Code: Alles auswählen

import os 
import subprocess
os.chdir("c:/Programme/distyingyang02")
subprocess.call("yingyang02.exe")
ACHTUNG ANFÄNGER!! Ich entschuldige mich im Voraus für dumme Fragen :-(
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Dann musst du bei cwd= auch c:/Programme/distyingyang02angeben und nicht C:.

Code: Alles auswählen

import subprocess
subprocess.call("example.exe", cwd="c:/Programme/distyingyang02")
Dango
User
Beiträge: 37
Registriert: Mittwoch 26. November 2008, 15:46
Kontaktdaten:

Dann kommt immmer folgendes:
Traceback (most recent call last):
File "<pyshell#2>", line 1, in <module>
subprocess.call("yingyang02.exe", cwd="C:/Programme/distyingyang02")
File "C:\Python25\lib\subprocess.py", line 443, in call
return Popen(*popenargs, **kwargs).wait()
File "C:\Python25\lib\subprocess.py", line 593, in __init__
errread, errwrite)
File "C:\Python25\lib\subprocess.py", line 793, in _execute_child
startupinfo)
WindowsError: [Error 2] Das System kann die angegebene Datei nicht finden

:cry:
oder geht das einfach net unter python 2.5?
ACHTUNG ANFÄNGER!! Ich entschuldige mich im Voraus für dumme Fragen :-(
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Müsste so gehen:

Code: Alles auswählen

import subprocess
subprocess.call([r'c:\Programme\distyingyang02\example.exe'], cwd=r"c:\Programme\distyingyang02")
Kann man auch ganz einfach erklären, warum das so ist. Und zwar wird im %PATH% unter Windows immer der aktulle Pfad geprüft um das Programm zu finden. Wenn man den Pfad ändert, dann sucht er logischerweise im neuen Ordner. Wenn man aber ``cwd`` setzt wird der ``%PATH%`` des Python-Interpreters nicht geändert sondern nur der des aufzurufenden Programms. Dieses kann aber nicht gestartet werden, da es nicht im ``%PATH%`` vorhanden ist. Also muss man den vollständigen Pfad angeben. Müsste so stimmen, habe kein Windows um das zu testen.
Zuletzt geändert von Leonidas am Sonntag 14. Dezember 2008, 17:54, insgesamt 2-mal geändert.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Ich Dödel! :oops:

Das kommt davon, wenn man immer unter Linux programmiert...
Bei Windows wird \ zum statt / benutzt. Als "normaler" String sieht das bei Python so aus:

Code: Alles auswählen

path = "c:\\Programme\\distyingyang02"
Leserlicher ist das aber als raw String:

Code: Alles auswählen

path = r"c:\Programme\distyingyang02"
@Leonidas: die Pfadangabe zu *.exe ist bei aber immer noch falsch. Entweder mit \ den Backslash escapen oder raw Strings benutzen. Bei der cwd-Angabe haste es ja richtig gemacht.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

derdon hat geschrieben:Das kommt davon, wenn man immer unter Linux programmiert...
Bei Windows wird \ zum statt / benutzt.
Das ist egal und löst das Problem nicht. Der Win-API ist es nämlich egal ob Slashes oder Backslashes im Pfad vorkommen. Die Lösung sieht so aus wie ich geschrieben habe: einfach den vollen Pfad angeben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

derdon hat geschrieben:@Leonidas: die Pfadangabe zu *.exe ist bei aber immer noch falsch. Entweder mit \ den Backslash escapen oder raw Strings benutzen. Bei der cwd-Angabe haste es ja richtig gemacht.
Jein. Man sollte es machen und ich habe es editiert aber es macht keinen Unterschied in dem Fall, da weder ``\P``, ``\d`` noch ``\e`` Escape-Sequenzen sind, somit werden die ohne Änderungen weitergegeben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
derdon
User
Beiträge: 1316
Registriert: Freitag 24. Oktober 2008, 14:32

Leonidas hat geschrieben:
derdon hat geschrieben:Das kommt davon, wenn man immer unter Linux programmiert...
Bei Windows wird \ zum statt / benutzt.
Das ist egal und löst das Problem nicht. Der Win-API ist es nämlich egal ob Slashes oder Backslashes im Pfad vorkommen. Die Lösung sieht so aus wie ich geschrieben habe: einfach den vollen Pfad angeben.
Ah, wieder was dazugelernt. Ganz schön schlau, diese Win-API...
Dango
User
Beiträge: 37
Registriert: Mittwoch 26. November 2008, 15:46
Kontaktdaten:

Es funktioniert!! Klasse!! Danke Leonidas!
nur ne ganz kurze Frage zum Verständnis: was bedeuten die kleinen r , und warum wurde der pfad nun in eckigen Klammern geschrieben?
aber danke schon mal vielmals für die Hilfe und die Erklärung.
Mit vielen Grüßen
Dango :D :D
ACHTUNG ANFÄNGER!! Ich entschuldige mich im Voraus für dumme Fragen :-(
Antworten