[Python-de] Re: os.system, backslash, commandline problem

Georg Mischler schorsch at schorsch.com
Tue Oct 30 09:02:10 EST 2001


nhytro-python at web.de wrote:

> > Hallo,
> >
> > Ich versuche eine kleine Frontend für eine dos commandline Applikation zu
> > schreiben. Wenn ich os.system verwende um die Commandline Applikation
> > aufzurufen, die "Switches" die ich übergebe werden erkann als Dateien. Dazu
> > habe ich bemerkt das Pfade werden auch nicht richtig behandelt.
> >
> > #### code snippet, callback FunKtion für tkinter Button
> >
> > def go_app():
> > ........textfile = inputfile.get() # inputfile is a tkintet entry widget
> > ........textfile = string.replace(textfile, '/', '\\')

Ich wuerde hier os.path.normpath(textfile) verwenden. Das hat
unter Windows die gleiche Wirkung, verursacht dir aber spaeter
unter Linux keine Probleme.


> > ........editor = editorpath.get()# editorpath is a tkinter entry widget
> > ........editor = string.replace(editor, '/', '\\')
> > ........editor = editor + " -test" # switch test
> > ........os.system(r"%s %s" % (editor, textfile))
>
> Wozu das "r" ? Deine Zeichenkette enthält doch gar keine "\", für die
> ein "raw string" nützlich wäre.
>
> > ############## end code
> >
> > ich habe diese File ausprobiert, es hat "gefährliche" Zeichen:
> > c:\the\boy.txt
>
> Was soll daran gefährlich sein ?
>
> python erkennt "\t" und "\b" als escape Sequenzen (TAB und BELL), also gefährlich

Das passiert nur dann, wenn der String "evaluiert" wird, sprich bei
Text, den du als literal in den Code reinschreibst. Der Wert der
Variablen editor und textfile wird im obigen Beispiel nirgends evaluiert.

Und noch ein Detail: Wenn du moechtest, dass dein Programm auch
funktioniert, wenn die Pfade von editor und textfile Leerzeichen
enthalten, dann solltest du die Pfade jeweils mit doppelten
Anfuehrungszeichen garnieren, nachdem du sie mit string.strip()
behandelt hast.

Einmal helfen die Anfuehrungszeichen der Shell zu erkennen, wo die
Pfade von Programm und Datei anfangen und aufhoeren. Und durch das
Strippen werden eventuelle Leerzeichen *vor und nach* den beiden
Pfaden entfernt, die der Benutzer versehentlich im Tk Entry-Widget
eingegeben hat.

Zusammengefasst:

 textfile = inputfile.get() # inputfile is a tkintet entry widget
 textfile = string.strip(os.path.normpath(textfile))
 editor = editorpath.get()# editorpath is a tkinter entry widget
 editor = string.strip(os.path.normpath(editor))
 os.system('"%s" -test "%s"' % (editor, textfile))


> > das commandline Applikation wird korrekt aufgerufen aber die Schalter
> > werden nicht erkannt. Die pfad für die wird auch nicht richtig aufgelöst:
> >
> >  " theoy.txt "
> >
> > Gibt es eine sicherer Methode um commandline Applikation mit Schalter
> > auszuführen mit os.sytem? (z.B "c:\foo.exe -test")

Die Schalter zu erkennen ist Aufgabe des Programms. Wenn das obige
nicht hilft, dann hat wahrscheinlich dein foo.exe selber ein Problem.


Viel Spass!

-schorsch

-- 
Georg Mischler  --  simulations developer  --  schorsch at schorsch.com
+schorsch.com+  --  lighting design tools  --  http://www.schorsch.com/




More information about the Python-de mailing list