Misstrauensvotum an mkpath(), kein error bei Misserfolg

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.
Antworten
buergi
User
Beiträge: 10
Registriert: Donnerstag 13. Juli 2006, 18:05

Donnerstag 13. Juli 2006, 18:24

hallo ich bin da beim proggen auf ein kleines problem gestoßen:

Code: Alles auswählen

# das erste mal wird das verzeichnis erzeugt
# nach dem löschen sollte es ein zweites mal erzeugt werden:
# aber es wird nicht erzeugt, mkpath raised nicht mal nen DistutilsFileError !

import os
from distutils import dir_util

dirn="./foo"

print "create " + dirn
print dir_util.mkpath(dirn)

print "remove " + dirn
os.rmdir(dirn)

print "recreate " + dirn
print dir_util.mkpath(dirn)

# mein output:

##############
# create ./foo
# ['foo']
# remove ./foo
# recreate ./foo
# []
##############
#  in den letzten eckigen klammern sollte eigentlich auch 'foo' stehen
pls probiert das skript mal aus, ich hab leider gerade keine weitere möglichkeit, da mein hauptrechner nen headcrash hat :( ich konnte das skript bis jetzt nur unter win98 testen, unter xp und linux hat ich noch keine möglichkeit.
funktioniert auch im ohne skript, also mit direkt eingabe und auch mit manuellem löschen und mit allen pfaden die ich getestet habe (absolute, relative, linux format mit / , win format mit \ , beide gemischt ) bei mir.

wie kann ich mich je wieder auf mkpath() verlassen :?: :D
wenn es mkpath() nicht schafft den pfad zu erzeugen (auch wenn es eigentlich keinen Grund dazu gibt) sollte es wenigstens einen DistutilsFileError raisen.

vielen dank schonmal
mahe
User
Beiträge: 1
Registriert: Samstag 8. Juli 2006, 23:53

Donnerstag 13. Juli 2006, 18:50

Ich habe unter Linux (Ubuntu letzte Version) exakt die selbe Ausgabe wie Du.
Er erstelle das Verzeichniss, löscht es auch wieder und erstellt es dannach nicht mehr ...
Benutzeravatar
DatenMetzgerX
User
Beiträge: 398
Registriert: Freitag 28. April 2006, 06:28
Wohnort: Zürich Seebach (CH)

Donnerstag 13. Juli 2006, 19:10

so gehts

Code: Alles auswählen

# das erste mal wird das verzeichnis erzeugt
# nach dem löschen sollte es ein zweites mal erzeugt werden:
# aber es wird nicht erzeugt, mkpath raised nicht mal nen DistutilsFileError !

import os

dirn="./foo"
if os.path.exists(dirn):
    os.rmdir(dirn)
    
print "create " + dirn
os.makedirs(dirn)

print "remove " + dirn
os.rmdir(dirn)

print "recreate " + dirn
os.makedirs(dirn)

# mein output:

##############
# create ./foo
# ['foo']
# remove ./foo
# recreate ./foo
# []
##############
#  in den letzten eckigen klammern sollte eigentlich auch 'foo' stehen 
Aber für was du print bei den verzeichnis erstellen hattest, verstehe ich nicht :s[/code]
buergi
User
Beiträge: 10
Registriert: Donnerstag 13. Juli 2006, 18:05

Donnerstag 13. Juli 2006, 19:21

thx DatenMetzgerX, makedirs() verdamnt ich hättes wissen müssen :)
Aber für was du print bei den verzeichnis erstellen hattest, verstehe ich nicht
Die prints waren nur dazu da, dass man sieht was mkpath macht, also sprich mkpath gibt ja eine list zurück in der alle erzeugten Verzeichnisse in richtiger Reihenfolge stehen. War ja ein konstruiertes Bsp, mein richtiges wäre zu lang gewesen.

thx auch 2 mahe, ka warum des nicht funzt :?: naja dann steig ich halt auf makedirs um ^^ dann brauch ich nicht mal ne neue lib importieren :)
buergi
User
Beiträge: 10
Registriert: Donnerstag 13. Juli 2006, 18:05

Donnerstag 13. Juli 2006, 19:31

sry noch ne frage wo ich schonmal dabei bin:
was genau is der unterschied zwischen os.makedirs() und os.mkdir() ?

PS: ich hab das SFM gelesen :D aber ich checks nicht :(
Like mkdir(), but makes all intermediate-level directories needed to contain the leaf directory. Throws an error exception if the leaf directory already exists or cannot be created.
was genau ist der Sinn von makedirs? is mkdir nicht besser? wo liegt der vorteil?

pls help nochmal
CM
User
Beiträge: 2464
Registriert: Sonntag 29. August 2004, 19:47
Kontaktdaten:

Donnerstag 13. Juli 2006, 20:05

Hoi buergi,

os.makedir wird Dir hier einen Traceback geben:

Code: Alles auswählen

os.makedir('path/path/path')
os.makedirs aber nicht, sondern brav alle Pfade anlegen - Genau wie von der Dokumentation versprochen.

Der Sinn des Ganzen? Manchmal braucht man der lieben Ordnung halber einen ganzen Stapel Unterverzeichnisse. Aber manchmal muß man halt etwas strukturierter vorgehen und dann kann es nützlich sein, eine Fehlermeldung zu erhalten und abzufangen. Ich würde makedirs nur selten einsetzen, ganz besonders nicht in File Dialogen in GUIs, denn das verführt mich dann als Nutzer des Programms dazu schludrig zu sortieren ;-)

Gruß,
Christian
buergi
User
Beiträge: 10
Registriert: Donnerstag 13. Juli 2006, 18:05

Donnerstag 13. Juli 2006, 20:23

thx Christian
man bin ich ein depp ^^ des war ja sowieso klar ^^ da bin ich wieder mal auf der leitung gestanden :D sch*
trotzdem danke nomal
Antworten