Problem bei Pfadangaben und der Aufgabenverwaltung unter Windows

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
Benutzeravatar
pixewakb
User
Beiträge: 1413
Registriert: Sonntag 24. April 2011, 19:43

Hallo zusammen,

ich habe folgendes Problem, dass ein Skript Daten aus einem Verzeichnis laden, verändern und speichern soll. Wenn ich das Skript mit hart codierten Pfadangaben im Verzeichnis manuell aus IDLE heraus ausführe, dann läuft es. Wenn ich es über die Aufgabenverwaltung starte und ausführe, dann findet das selbe Programm offenbar das Verzeichnis (hart codiert!) nicht und kann folglich nur Platzhalter einfügen.

Ich stehe etwas auf dem Schlauch, hat jemand eine Idee, was ich machen kann?

Posten des ganzen Quellcodes wird nicht funktionieren, da das Tool etliche eigene Bibliotheken nutzt usw. Folgende Stellen funktionieren momentan nicht, wenn ich das richtig verstehe:
(1)

Code: Alles auswählen

                try:
                    with open("C:\\Users\\[...]\\memory\\{}{}\\{}".format(mode, zeitraum, filename)) as f:
                        csvreader = csv.reader(f, delimiter=',')
                        pre_values_dict = {rows[0]:[rows[1], rows[2]] for rows in csvreader}
                except FileNotFoundError:
                    input("FileNotFoundError!")
                    pre_values_dict = {}
Die Input-Zeile wird nicht ausgeführt, weil das Tool ganz durchläuft und mir einen HTML-Bericht erzeugt.

(2)

Code: Alles auswählen

def save_values(old_values,  zeitraum, mode):
    values = [(item[5], item[7], item[1]) for item in old_values]
    directory =  "C:\\Users\\[...]\\memory\\{}{}".format(mode, zeitraum)
    if not os.path.exists(directory):
        os.makedirs(directory)
    with open("{}/{}.csv".format(directory, datetime.date.today()), "w") as f:
        for line in values:
            f.write(",".join(map(str, line)) + "\n")
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Statt deine Pfade da in-Place zusammenzunageln und sie gleich zu verwenden bietet es sich an, sie an eigene Namen zu binden, und vorher mal zb mittels logging an das Windows Event log oder eine dedizierte Datei auszugeben. Genauso wie eventuelle Fehler. Da wird sich dann schon etwas zeigen.

Statt mühselig alle backslashes zu escapen kannst du auch raw-strings oder os.path.join nutzen.
Benutzeravatar
pixewakb
User
Beiträge: 1413
Registriert: Sonntag 24. April 2011, 19:43

Bei os.path.join() gebe ich da auch "C:" als Element dazu? Ich hatte ursprünglich vermutet, dass Pfadangaben, die sich auf das Verzeichnis beziehen und nicht alles mitbekommen (also C:...) das Problem sind, aber danach sieht es momentan leider nicht aus. Danke für die Antwort!
__deets__
User
Beiträge: 14545
Registriert: Mittwoch 14. Oktober 2015, 14:29

Probier’s doch mal aus. Dein Interpreter ist schneller gestartet als deine Frage gestellt.

os.path.join ist des weiteren kein magisches Allheilmittel. Du kannst damit auch komplette Mondpfade zusammenstricken. Aber wenigstens syntaktisch korrekt.

Der wichtigste Punkt aber ist logging, um dein Problem auch im Fall des Starts mit der Aufgabenverwaltung anzugehen.
Benutzeravatar
pixewakb
User
Beiträge: 1413
Registriert: Sonntag 24. April 2011, 19:43

Sorry, ich hatte gestern Abend an zwei Modulen gleichzeitig gearbeitet. Eigentlich lief das betreffende Skript, weshalb ich mir die nächste Baustelle vorgenommen habe. Dann wurde die erste Baustelle noch mal aufgemacht.

Ich habe jetzt festgestellt, dass ein importiertes Skript eine Pfadangabe dynamisch ermittelt hat und da relativ, wahrscheinlich irgendwo im Nirvana meines Rechners Verzeichnisse angelegt und befüllt hat. :cry: Ich habe den Fehler jetzt gefixt. Danke! :wink:
Antworten