Seite 1 von 1

Aufruf Programm über Argumente leerzeichen problem

Verfasst: Donnerstag 26. Februar 2015, 11:06
von sbfly
Hallo ich habe ein kleines Problem


Ich möchte in meinem Python skript ein Shell kommand aufrufen
dieses Kommand setzt sich aus dem Prozessor und einer Datei zusammen
start.exe Parameter.xml

Nun würde ich gerne diesen Parameter als ein Argument übergeben da der command befehl universell einsetzbar sein sollte.

Code: Alles auswählen

args = sys.argv[1:]
if len(args) != 2:
    usage()
Command = args[0]
outFileName = args[2]

cfi = subprocess.Popen(Command)
Mein Problem ist nun das der Command befehl sich aus 2 Worten zusammen setzt
und somit nicht als ein argument erkannt wird.

Gibt es eine möglichkeit einem Argument 2 strings mit leerzeichen getrennt zu übergeben?

Viele Grüße

SBFly

Re: Aufruf Programm über Argumente leerzeichen problem

Verfasst: Donnerstag 26. Februar 2015, 11:34
von BlackJack
@sbfly: Ja die Möglichkeit gibt es, die sollte man aber nicht verwenden. Warum übergibst Du nicht beide Argumente als Liste, so wie das vorgesehen ist‽ In Deinem Beispiel also einfach `args` als Argument für `Popen()`.

Wenn man beides als eine Zeichenkette übergeben möchte, dann muss man zwischen dem Programm das man starten möchte und dem eigenen noch eine Shell setzen die dann diese eine Zeichenkette interpretiert und daraus für das gestartete Programm wieder zwei Argumente macht. Und bei diesem interpretieren fangen dann die Probleme an: Es wird nicht nur jedes (was so auch wieder nicht stimmt) Leerzeichen zum trennen genommen, sondern auch noch ein Haufen anderer Zeichen mit besonderen Bedeutungen versehen, die man alle vor der Shell schützen muss, damit das robust funktioniert. Und man weiss nicht welche Shell das ist die der Benutzer auf dem Zielsystem verwendet und damit auch nicht was man eigentlich alles vor der Shell schützen muss und wie.

Re: Aufruf Programm über Argumente leerzeichen problem

Verfasst: Donnerstag 26. Februar 2015, 13:17
von sbfly
Vielen Dank
für die Antwort. Dann muss ich wohl ein weiteres argument einführen und diese als liste übergeben
habe gehoft auf ein Argument verzichten zu können