使用Python,如何通过网络关闭另一个用户正在使用的文件?

时间:2011-09-27 09:35:32

标签: python file-io

我有一个程序可以创建一堆电影文件。我作为一个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.  

3 个答案:

答案 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