Programm mit variable aufrufen

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.
Antworten
The Spirit
User
Beiträge: 276
Registriert: Freitag 8. Juni 2007, 08:50
Wohnort: 84xxx Bereich
Kontaktdaten:

HI.

will ein prog mit

Code: Alles auswählen

os.system(r'"c:\programme\prog.exe"') 
aufrufen was auch einwandfrei funzt.

jetzt will ich den pfad

Code: Alles auswählen

c:\programme\
mittels variable übergeben.
Bekomm es nun einfach nicht hin, wie ich das mit den ganzen anführungszeichen machen muss.
Hoffe, ihr habt tips.
Thx
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ist im Wiki unter [wiki=Neue Features#Subprocess]subprocess[/wiki] beschrieben. ``subprocess`` kümmert sich auch gleich um das richtige Quoting, also musst du nur die Parameter übergeben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
The Spirit
User
Beiträge: 276
Registriert: Freitag 8. Juni 2007, 08:50
Wohnort: 84xxx Bereich
Kontaktdaten:

hi.
klappt auch ganz gut, jedoch nur, wenn im pfad zum prog kein leerzeichen ist.

ich teste aktuell mit folgendem code

Code: Alles auswählen

import os, popen2, subprocess
import sys

cmd = str(sys.argv[1]) #testweise übergabe des programmpfades mittels variable

subprocess.Popen(cmd)
wenn jetzt der pfad kein leerzeichen hat, klappt es ohne probs.
hat er jedoch eins, dann bekomm ich nen [Error 2]

vielleicht hat jemandn noch ne idee
thx
schlangenbeschwörer
User
Beiträge: 419
Registriert: Sonntag 3. September 2006, 15:11
Wohnort: in den weiten von NRW
Kontaktdaten:

Hast du schonmal probiert, den Pfad nochmal zu quoten? Also "'pfad mit freiraum'"
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

The Spirit hat geschrieben:vielleicht hat jemandn noch ne idee
Hallo The Spirit!

Wenn du an ``subprocess.Popen()`` eine Liste mit Argumenten übergibst, dann kümmert sich Popen selber um die korrekte Verwendung von Anführungszeichen. -- Normalerweise zumindest.

proc = subprocess.Popen(["programmname", "argument1", "argument 2 immer noch 2 immer noch2", "argument3"])

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
The Spirit
User
Beiträge: 276
Registriert: Freitag 8. Juni 2007, 08:50
Wohnort: 84xxx Bereich
Kontaktdaten:

gerold hat geschrieben:
The Spirit hat geschrieben:vielleicht hat jemandn noch ne idee
Hallo The Spirit!

Wenn du an ``subprocess.Popen()`` eine Liste mit Argumenten übergibst, dann kümmert sich Popen selber um die korrekte Verwendung von Anführungszeichen. -- Normalerweise zumindest.

proc = subprocess.Popen(["programmname", "argument1", "argument 2 immer noch 2 immer noch2", "argument3"])

mfg
Gerold
:-)
vielleicht sehe ich den wald vor lauter bäumen nicht. deshalb mal ein bischen weiter ausgeholt.

letztendlich sollen mehrere user bei denen dasselbe programm zwar gestartet wir, der pfad zum prog aber in unterschiedlichen ordnern sein kann, diese script nutzen können.
deshalb soll mittels gui (wahrscheinlich tk) mittels ordnerauswahl der pfad zum prog ausgewählt oder eingeben (in ein entry feld) werden können.
somit muss ich den pfad als eine "lange" variable" übergeben können.
hat der pfad kein leerzeichen, läuft es schon, mit leerzeichen jedoch nicht.
vielleicht ist es jetzt etwas klarer
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hallo The Spirit!

Meine Aussage steht immer noch. Auch wenn der Pfad mehrere Lehrzeichen enthält. Er ist immer noch NUR ein Argument, das an zweiter Stelle in der Argumentenliste stehen muss.

Code: Alles auswählen

args = ["C:\\Meine Programme\\Deine Programme\\Mein Programm.py"]
proc = subprocess.Popen(args)
Vielleicht musst du noch die python.exe vorschieben.

Code: Alles auswählen

args = [sys.executable, "C:\\Meine Programme\\Deine Programme\\Mein Programm.py"]
proc = subprocess.Popen(args)
Wenn du nur etwas starten musst. -- Vielleicht bist du mit ``subprocess.Call`` besser beraten.

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Antworten