Seite 1 von 1

Programm mit variable aufrufen

Verfasst: Samstag 20. Oktober 2007, 18:02
von The Spirit
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

Verfasst: Samstag 20. Oktober 2007, 18:43
von Leonidas
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.

Verfasst: Dienstag 23. Oktober 2007, 16:38
von The Spirit
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

Verfasst: Dienstag 23. Oktober 2007, 16:49
von schlangenbeschwörer
Hast du schonmal probiert, den Pfad nochmal zu quoten? Also "'pfad mit freiraum'"

Verfasst: Dienstag 23. Oktober 2007, 16:52
von gerold
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
:-)

Verfasst: Dienstag 23. Oktober 2007, 16:59
von The Spirit
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

Verfasst: Dienstag 23. Oktober 2007, 17:08
von gerold
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
:-)