Рассмотрим delfoo.py
и его партнера lol.py
:
#----delfoo.py-----
import os
os.unlink("foo.txt")
#----lol.py----
import os,sys
f = open("foo.txt","w")
f.write("HI")
#not closing f on purpose!
os.execl(sys.executable, sys.executable, "delfoo.py")
print "If this line shows, then something is broken."
Вызов python lol.py
выходов (обратите внимание, что последняя строка не печаталась):
C:\tmp>python lol.py
C:\tmp>Traceback (most recent call last):
File "delfoo.py", line 2, in <module>
os.unlink("foo.txt")
WindowsError: [Error 32] The process cannot access the file because it is being
used by another process: 'foo.txt'
Я нахожуэто странно, поскольку os.excel
должен заменить текущий запущенный процесс другим.Если он заменен, и если после завершения программы можно удалить файл, даже если он не был закрыт:
C:\tmp>del foo.txt
C:\tmp>dir foo.txt
Volume in drive C has no label.
Volume Serial Number is 1060-E78D
Directory of C:\tmp
File Not Found
, почему я не могу удалить файл из нового процесса, который заменилПредыдущая?Как сделать так, чтобы экземпляр os.execl
d, delfoo.py
, мог отсоединить файл, открытый его предшественником, lol.py
, не закрывая указанный файл?