我有一个程序可以创建一堆电影文件。我作为一个cron工作运行,每次运行上一次迭代的电影都会移动到'previous'文件夹,以便始终可以查看以前的版本。
这些电影文件是由不同的用户通过网络访问的,而这正是我遇到问题的地方。
当脚本运行并尝试移动文件时,它会抛出资源繁忙错误,因为文件是由各种用户打开的。在我尝试移动它们之前,Python中有没有办法强制关闭这些文件?
进一步澄清:
当他提到JMax是服务器级问题时,它是正确的。我可以通过管理工具>访问我们的Windows服务器计算机管理>共享文件夹>打开文件并手动关闭那里的文件,但我想知道是否有一个Python等价物可以达到相同的效果。
类似的东西:
try:
shutil.move(src, dst)
except OSError:
# Close src file on all machines that are currently accessing it and try again.
答案 0 :(得分:3)
这个问题与Python无关,而且与您正在使用的特定操作系统和文件系统有关。你能提供这些细节吗?
至少在Windows中,您可以使用Sysinternals Handle强制关闭文件的特定句柄。特别是当该文件由另一个用户通过网络打开时,该操作非常不稳定并且可能使得网络连接随后无用。您正在寻找“-c”命令行参数,其中文档为:
关闭指定的句柄(解释为十六进制数字)。您 必须通过PID指定进程。
警告:关闭句柄可能会导致应用程序或系统不稳定。
如果您在Linux中强制关闭安装在Samba上的文件,那么从经验来看,这是徒劳无功的经历。然而,其他人尝试了不同的成功;见Force a Samba process to close a file。
答案 1 :(得分:0)
据我所知,您必须结束访问该文件的进程。至少在Windows上
答案 2 :(得分:0)
.close()
方法对您的目标文件无效?
有关文件对象的更多信息,请参阅dive into Python
[编辑]我重新阅读了你的问题。您的问题是用户确实从网络打开了同一个文件,您希望他们关闭该文件吗?但是你可以访问他们的操作系统吗?
[EDIT2]服务器级别的问题更多是断开访问该文件的用户的连接。有关Windows服务器的信息,请参阅this example。