如何使用Python关闭被其他用户占用的网络文件?

3 投票
3 回答
3946 浏览
提问于 2025-04-17 03:10

我有一个程序,它会创建很多电影文件。这个程序是定时运行的,每次运行时,之前的电影文件会被移动到一个叫“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

你发现 .close() 这个方法在你的文件对象上不起作用吗?

想了解更多关于文件对象的信息,可以看看 Dive into Python

[编辑] 我重新看了一下你的问题。你的问题是用户确实从网络上打开了同一个文件,而你想让他们关闭这个文件?但是你能访问他们的操作系统吗?

[编辑2] 这个问题更多是出在服务器层面,涉及到断开访问文件的用户。可以参考 这个例子,适用于Windows服务器。

0

据我所知,你需要结束那些正在访问这个文件的程序。至少在Windows系统上是这样的。

3

这个问题和Python没有关系,主要跟你使用的操作系统和文件系统有关。你能提供这些详细信息吗?

在Windows系统中,你可以使用Sysinternals Handle这个工具来强制关闭某个文件的句柄。特别是当这个文件是通过网络被其他用户打开时,这样的操作会非常不稳定,可能会导致网络连接之后变得无用。你需要找的是“-c”这个命令行参数,文档中是这样写的:

关闭指定的句柄(以十六进制数字表示)。你必须通过进程的PID来指定进程。

警告:关闭句柄可能会导致应用程序或系统不稳定。

如果你在Linux系统中强制关闭一个通过Samba挂载的文件,根据我的经验,这个过程会让人感到非常无奈。不过,也有其他人尝试过,结果各有不同;可以看看强制Samba进程关闭文件这篇文章。

撰写回答