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

Programm mit variable aufrufen

Beitragvon The Spirit » Samstag 20. Oktober 2007, 18:02

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

Beitragvon Leonidas » Samstag 20. Oktober 2007, 18:43

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

Beitragvon The Spirit » Dienstag 23. Oktober 2007, 16:38

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:

Beitragvon schlangenbeschwörer » Dienstag 23. Oktober 2007, 16:49

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

Beitragvon gerold » Dienstag 23. Oktober 2007, 16:52

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: 274
Registriert: Freitag 8. Juni 2007, 08:50
Wohnort: 84xxx Bereich
Kontaktdaten:

Beitragvon The Spirit » Dienstag 23. Oktober 2007, 16:59

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: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Dienstag 23. Oktober 2007, 17:08

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.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder