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.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Zu den "Klammern":
Python Doku hat geschrieben: "args should be a string, or a sequence of program arguments. The program to execute is normally the first item in the args sequence or the string if a string is given, but can be explicitly set by using the executable argument."
Man kann eben auch eine Sequenz übergeben.

Das "r" steht für raw-String und sorgt dafür, dass die "" innerhalb des Strings nicht als Escape-Sequenz interpretiert werden.
Python Doku hat geschrieben: String literals may optionally be prefixed with a letter 'r' or 'R'; such strings are called raw strings and use different rules for interpreting backslash escape sequences.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dango hat geschrieben:nur ne ganz kurze Frage zum Verständnis: was bedeuten die kleinen r , und warum wurde der pfad nun in eckigen Klammern geschrieben?
Die kleinen ``r`` stehen für Raw-String, d.h. die Escape-Sequenzen werden nicht ausgeführt. Also zum Beispiel '\n' ist ein Zeilenumbruch und wenn man 'C:\Programme\nbpython' hat, möchte man da ein '\n' haben und keinen Zeilenumbruch.

Der Pfad ist in eckigen Klammern weil die darunter liegende API die Prozesse startet eigentlich ein Array von Parametern erwartet. Wenn du ein Programm in der Eingabeaufforderung startest passiert auch nichts anderes dass die Eingabe nach bestimmten Regeln an Leerzeichen gespalten wird und dann an diese API funktion direkt übergeben wird. Genau diesen Zerlegungsschritt sparst du dir hier direkt, indem du direkt eine Liste übergibst. Das hat Vorteile zum beispiel wenn man irgendwelche Parameter mit übergeben will die Leerzeichen enthalten, die setzt man dann einfach in die Liste rein statt sie zu escapen und irgendwo in den String einzusetzen, wo sie dann sowieso wieder intern in eine Liste umgewantelt werden.

Hyperion, so einfach ist das mit der Sequenz eben nicht. Daher sollte man eigentlich immer eine Liste übergeben. Ab Python 2.5 kann man da nun ein Tupel übergeben, was in Python 2.4 noch nicht möglich war.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Dango
User
Beiträge: 37
Registriert: Mittwoch 26. November 2008, 15:46
Kontaktdaten:

Super!! Vielen Dank euch beiden für die Erklärung!!
Ich find es einfach toll wie schnell und hilfsbereit hier die leute sind!
da stellt man gerne Fragen :D
Nochmal vielen Dank
Mit vielen Grüßen an alle die mir so toll geholfen haben
Dango
ACHTUNG ANFÄNGER!! Ich entschuldige mich im Voraus für dumme Fragen :-(
madthomas
User
Beiträge: 35
Registriert: Dienstag 7. August 2007, 10:32
Wohnort: WND
Kontaktdaten:

Hallo erstmal Danke. Ihr konntet mir mit meinem Problem soweit helfen aber bei mir wird es jetzt interessanter.
Ich muss ein Programm aufrufen mit Parameterübergabe und Pfad

Code: Alles auswählen

subprocess.call([r'C:\Programme\Disney Interactive\Aladin blabla\bin\aladin.exe' -run -batch 'C:\Dokumente und Einstellungen\user\Desktop\Aladin\Model'], cwd=r"Programme\Disney Interactive\Aladin blabla\bin")
So hab wollte ich das dann nutzen
Bekomme immer ein Syntax Error wegen dem ' vor der ]

Code: Alles auswählen

SyntaxError: invalid syntax
Unter Windows geht es mit folgender Befehlzeile

Code: Alles auswählen

"c:\Programme\Disney Interactive\Aladin blabla\bin\aladin.exe" -run -batch "C:\Dokumente und Einstellungen\user\Desktop\Aladin\Model"
Danke im Vorraus
Benutzeravatar
Rebecca
User
Beiträge: 1662
Registriert: Freitag 3. Februar 2006, 12:28
Wohnort: DN, Heimat: HB
Kontaktdaten:

Code: Alles auswählen

subprocess.call([r'C:\Programme\Disney Interactive\Aladin blabla\bin\aladin.exe',
     '-run', '-batch', r'C:\Dokumente und Einstellungen\user\Desktop\Aladin\Model'],
     cwd=r"Programme\Disney Interactive\Aladin blabla\bin")
Python kennt deine Parameter nicht, die uebergibst du als Liste von Strings. Ausserdem solltest du den zweiten Pfad besser auch als Raw-String deklarieren.
Offizielles Python-Tutorial (Deutsche Version)

Urheberrecht, Datenschutz, Informationsfreiheit: Piratenpartei
madthomas
User
Beiträge: 35
Registriert: Dienstag 7. August 2007, 10:32
Wohnort: WND
Kontaktdaten:

Danke


Gibt es jetzt noch die Möglichkeit das das Programm nur aufgerufen wird und nicht gewartet wird bis es wieder beendet wurde?
lunar

"call()" durch "Popen()" ersetzen ...
Antworten