Seite 1 von 1

Leerzeichen im Pfad - Problem für os.path.exists?

Verfasst: Mittwoch 23. Januar 2013, 09:41
von Python93
Hallo zusammen,

ich habe drei Verzeichnisse, in denen ich ein File auf Existenz überprüfen möchte:
  • - C:\\Program Files\\Hummingbird\\Connectivity\\13.00\\Exceed\\xstart.exe
  • - C:\\Programme\\Hummingbird\\Connectivity\\13.00\\Exceed\\xstart.exe
  • - C:\\Program Files(x86)\\Hummingbird\\Connectivity\\13.00\\Exceed\\xstart.exe
Mittels os.path.exists("..") ermittle ich 'True' oder 'False'. Befindet sich die Datei xstart.exe jedoch im letzten Verzeichnis, liefert er mir leider False zurück.
Nach ein wenig nachlesen im Internet, habe ich auch schon probiert '"\\Pfad"' zu machen. Das ging leider auch nicht.

Kennt ihr irgendein Trick, wie ich (ohne die Verzeichnisse umzubenennen) trotzdem 'True' zurückbekomme?
Oder alternativ einen anderen Weg um zu überprüfen, ob eine Datei in einem Verzeichnis liegt?


Hier habe ich mal einen Ausschnitt aus dem Quellcode. Ich prüfe auf eine Datei und wenn sich die Datei in dem überprüften Verzeichnis befindet, starte ich sie und übergebe ganz viele Parameter.
Aber wenn ich die Datei in das letzte Verzeichnis packe, liefert er mir False zurück. Vermutung liegt ja auf dem Leerzeichen im Pfad.

Kann mir bitte jmd helfen? Dankeschön.

Code: Alles auswählen

if os.path.exists("C:\\Program Files\\Hummingbird\\Connectivity\\13.00\\Exceed\\xstart.exe") == True:
    pfad = '"C:\\Program Files\\Hummingbird\\Connectivity\\13.00\\Exceed\\"'
    subprocess.Popen('"c:\\Program Files\\Hummingbird\\Connectivity\\13.00\\Exceed\\xstart.exe"' + " -m telnet" + " -h " + ip + " -c " + '"export PLM_MODE=edb; aixterm -ls  -fn 10x20 -geometry 80x42 -sb -display @d -e catiaPC -xterm"')
    
elif os.path.exists("C:\\Programme\\Hummingbird\\Connectivity\\13.00\\Exceed\\xstart.exe") == True: 
    pfad = '"C:\\Programme\\Hummingbird\\Connectivity\\13.00\\Exceed\\"'
    subprocess.Popen('"c:\\Programme\\Hummingbird\\Connectivity\\13.00\\Exceed\\xstart.exe"' + " -m telnet" + " -h " + ip + " -c " + '"export PLM_MODE=edb; aixterm -ls  -fn 10x20 -geometry 80x42 -sb -display @d -e catiaPC -xterm"')
        
elif os.path.exists("C:\\Program Files(x86)\\Hummingbird\\Connectivity\\13.00\\Exceed\\xstart.exe") == True:
    pfad = '"C:\\Program Files(x86)\\Hummingbird\\Connectivity\\13.00\\Exceed\\"'
    subprocess.Popen('"c:\\Program Files(x86)\\Hummingbird\\Connectivity\\13.00\\Exceed\\xstart.exe"' + " -m telnet" + " -h " + ip + " -c " + '"export PLM_MODE=edb; aixterm -ls  -fn 10x20 -geometry 80x42 -sb -display @d -e catiaPC -xterm"')

Re: Leerzeichen im Pfad - Problem für os.path.exists?

Verfasst: Mittwoch 23. Januar 2013, 09:59
von sparrow
1. Es sieht komisch aus, wenn du etwas, dass bereits einen Wahrheitswert zurück liefert gegen True prüfst. Du würdest ja auch nicht if True == True schreiben.
2. os.path.exists kommt prima mit Leerzeichen klar. Das ist also nicht dein Problem:

Code: Alles auswählen

>>> import os
>>> os.path.exists(r"c:\temp\space test\test.txt")
True
3. Du solltest die Zeichenketten für subprocess nicht so zusammensetzen. Subprocess nimmt gerne Tupel entgegen, wobei jeder Einrag einem Argument entspricht. Dann muss man sich um das Quoten nicht kümmern. Womöglich liegt da dein Problem.

Zeig doch mal im Interpreter wie es schief geht.

Ganz nebenbei:
In meiner VM heißt das Verzeichnis nicht "Program Files(x86)" sondern "Program Files (x86)". Python hat also recht: die Datei existiert nicht.

Re: Leerzeichen im Pfad - Problem für os.path.exists?

Verfasst: Mittwoch 23. Januar 2013, 10:24
von Sirius3
Hallo Python93,

eines der grundlegendsten Prinzipien überhaupt ist Don't-Repeat-Yourself.

Code: Alles auswählen

program_file_directory_names = ['Program Files', 'Programme', 'Program Files(x86)']
for program_file_directory_name in program_file_directory_names:
    xstart = r"C:\{0}\Hummingbird\Connectivity\13.00\Exceed\xstart.exe".format(program_file_directory_name)
    if os.path.exists(xstart):
        break
else:
    raise AssertionError("xstart not found!")

subprocess.Popen([xstart,
    '-m', 'telnet',
    '-h', ip,
    '-c','export PLM_MODE=edb; aixterm -ls  -fn 10x20 -geometry 80x42 -sb -display @d -e catiaPC -xterm'])

Re: Leerzeichen im Pfad - Problem für os.path.exists?

Verfasst: Mittwoch 23. Januar 2013, 10:37
von BlackJack
@Python93: Ich tippe auf ein Problem mit Leerzeichen, allerdings nicht bei Python sondern bei Dir, denn ich bin mir ziemlich sicher, dass zwischen 'Files' und '(x86)' eines fehlt.

Re: Leerzeichen im Pfad - Problem für os.path.exists?

Verfasst: Mittwoch 23. Januar 2013, 10:52
von Python93
Oke... ja BlackJack, du hast Recht gehabt *peinlich* :oops:
Als ich das Programm geschrieben hatte, hatte ich offenbar zwischen dem Files und (x86) kein Leerzeichen gesehen :P

Vielen vielen Dank für die Tipps noch, Sirius3 und sparrow.