file handler - Problem bei mehrmaligem Durchlauf einer Befehlssequenz
Verfasst: Sonntag 16. August 2020, 12:40
Hallo,
ich bin hier neu und hab bisher eher kleine Skripts geschrieben, was sich aber gerade ändert - es wird mehr und kontinuierlich. Darum lese und teste mich gerade durch die Lib-Doku - aktuell os und os.path - und bin auf folgendes Problem gestoßen.
Der erste, unten stehende Codeblock läuft nur einmal fehlerfrei durch (os/os.path lade ich nur einmal), weil der file handler für file3/fd3 beim nächsten Durchlauf nicht mehr erzeugt werden kann:
Fehler OSError: [WinError 6] Das Handle ist ungültig"
Verwende ich hingegen die os.open()-Methode auch für den dritten file handler (siehe zweiten Codeblock, kann der Code problemlos mehrfach ausgeführt werden. Mir scheint, das Problem kommt aus der Ecke, dass Python manche Sachen nur einmal in einer Session ausführt. Es wundert mich aber, dass mit der with open() as -Methode der file-handler wiederholt erzeugt wird. Ist die letztendlich nicht nur ein Wrapper um die vollständige Sequenz von file = open()… file.close() inkl. try/except?
Verwendet wird Python 3.6.6 (Anaconda)-
Vielen Dank, wenn hier jemand ein bisschen Licht ins Dunkel der Abläufe bringen kann!!!
ich bin hier neu und hab bisher eher kleine Skripts geschrieben, was sich aber gerade ändert - es wird mehr und kontinuierlich. Darum lese und teste mich gerade durch die Lib-Doku - aktuell os und os.path - und bin auf folgendes Problem gestoßen.
Der erste, unten stehende Codeblock läuft nur einmal fehlerfrei durch (os/os.path lade ich nur einmal), weil der file handler für file3/fd3 beim nächsten Durchlauf nicht mehr erzeugt werden kann:
Fehler OSError: [WinError 6] Das Handle ist ungültig"
Verwende ich hingegen die os.open()-Methode auch für den dritten file handler (siehe zweiten Codeblock, kann der Code problemlos mehrfach ausgeführt werden. Mir scheint, das Problem kommt aus der Ecke, dass Python manche Sachen nur einmal in einer Session ausführt. Es wundert mich aber, dass mit der with open() as -Methode der file-handler wiederholt erzeugt wird. Ist die letztendlich nicht nur ein Wrapper um die vollständige Sequenz von file = open()… file.close() inkl. try/except?
Verwendet wird Python 3.6.6 (Anaconda)-
Vielen Dank, wenn hier jemand ein bisschen Licht ins Dunkel der Abläufe bringen kann!!!
Code: Alles auswählen
# Codeblock 1
import os
from os.path import *
datei1 = 'punch.txt'
fd1 = os.open(datei1, os.O_RDONLY)
datei2 = 'punch2.txt'
with open(datei2, 'a') as file2:
print('sameopenfile(fd1,file2.fileno()) -->', sameopenfile(fd1, file2.fileno()))
datei3 = 'punch.txt'
file3 = open(datei3, mode = 'r')
fd3 = file3.fileno()
print('sameopenfile(fd1, fd3) -->', sameopenfile(fd1, fd3))
os.close(fd1)
os.close(fd3)
del fd1, fd3
Code: Alles auswählen
# Codeblock 2
datei3 = 'punch.txt'
fd3 = os.open(datei3, os.O_RDONLY)
print('sameopenfile(fd1, fd3) -->', sameopenfile(fd1, fd3))