Jemand eine Idee, was dahinter steckt!? Wenn ich es richtig verstehe, dann kommt der Fehler, wenn eine Datei, die in Python geöffnet ist, von einem anderen Prozess geschlossen wurde!?
Jemand eine Idee, was konkret das auslösen kann und wie ich das ggf. umschiffen könnte!?
Mein Tool arbeitet Berichte ab, die andere Tools in einen Eingang-Ordner schreiben.
Code: Alles auswählen
#!/usr/bin/env python2
# -*- coding: utf-8 -*-
import codecs
import os
import pywikibot
import shutil
import sys
import time
import traceback
'''
Was soll das Tool machen?
In Dauerschleife checken,
ob im Aufgaben-Ordner Dateien liegen,
dazu Dateien erfassen
- falls ja, dann
- sleep(5 Minuten)
# falls noch geschrieben wurde
- Dateien nach und nach
ins Wiki schaufeln
- Erledigte Dateien nach
pfad_erledigt schaufeln
in einen Unterordner
- loggen (?) ### Nicht implementiert
- falls nein, dann
- sleep(60 Minuten)
'''
# Settings
pfad_aufgaben = "C:/Users/.../_Eingang"
pfad_erledigt = "C:/Users/.../_Ablage"
# Funktionen
def dateien_erfassen(pfad):
# Erfasst alle Dateien in einem gegebenen Pfad
files = os.listdir(pfad)
files.sort()
return files
def datei_verschieben(file, src, dst):
# Verschiebt eine Datei in
# ein Zielverzeichnis
# Heutiges Datum
datum = datum_erhalten()
# Quell- und Zieldatei sowie
# Zielverzeichnis festlegen
quelldatei = src + "/" + file
zieldatei = dst + "/" + datum + "/" + file
zielverzeichnis = dst + "/" + datum
# Zielverzeichnis anlegen,
# falls es noch nicht existiert
if os.path.isdir(zielverzeichnis) == True:
pass
else:
os.mkdir(zielverzeichnis)
shutil.move(quelldatei, zieldatei)
def datum_erhalten():
# Liefert das heutige Datum
# in der Form JJJJ-MM-DD zurück
datum = time.strftime("%Y-%m-%d")
return datum
# Main-Schleife
def main(pfad_aufgaben, pfad_erledigt):
while True:
files = dateien_erfassen(pfad_aufgaben)
if len(files) == 0:
print "Keine Arbeit..."
# Mache weiter nach einer Wartezeit
time.sleep(10 * 60) # 60 * 60 seconds
else:
# Warte kurz, falls noch geschrieben wird
print "Arbeitsbeginn..."
time.sleep(1 * 60)
for file in files:
print "Verarbeite: " + file
with codecs.open(pfad_aufgaben + "/" + file,"r",'iso-8859-1') as f:
text = f.read()
site = pywikibot.Site()
page = pywikibot.Page(site, sitename)
page.text = text
page.save(u"Bot")
datei_verschieben(file, pfad_aufgaben, pfad_erledigt)
if __name__ == "__main__":
try:
main(pfad_aufgaben, pfad_erledigt)
except:
var = traceback.format_exc()
var += "\n - - - - - - \n\n"
dateiname = "ausgabe " + datum_erhalten() + ".txt"
with open(dateiname,"a") as f:
f.write(var)
print "Unexpected error:", sys.exc_info()[0]
raise
finally:
print "OK"
[1] Im ersten Schritt wäre ich aber für eine Info zum Fehler "IOError: [Errno 9] Bad file descriptor" dankbar. Wann passiert so etwas!?
[2] BTW: Feedback zum Quellcode gerne, es wird allerdings etwas dauern, bis ich mich darum ggf. kümmern kann. Ich habe gerade einige andere Sachen, die ich programmieren muss, da ist viel Work-in-Progress (und hoffentlich läuft es erst einmal).