如何判断Windows上的另一个应用程序是否正在使用某个文件

时间:2016-05-03 17:21:24

标签: python windows locking

我想从基于Python的GUI应用程序启动MS-Office文档。我正在通过Subprocess模块​​使用命令行让Windows执行将可执行应用程序映射到文件的繁重工作,但如果文件已经在网络上某处打开,它将无声地失败。我宁愿给出一个消息框,而不是默默地失败。如何在不更改文件修改时间的情况下告知此方案?

1 个答案:

答案 0 :(得分:1)

我发现您可以尝试将文件重命名为其当前名称。如果另一个应用程序打开了该文件,则会因PermissionError异常而失败。如果它没有失败,那么它就是一个完整的无操作。因此:

def start_file(file):
    if os.path.exists(file):
        try: os.rename(file, file) # This does NOTHING if the file is available, or fails.
        except PermissionError: messagebox.showwarning('File in Use', 'The file appears to be already open. Sorry about that.')
        else: subprocess.call(['start', '/B', file], shell=True)
    else: messagebox.showwarning('Missing File', 'That files does not yet exist. Sorry about that.')

纯粹主义者会指出这至少受到一种竞争条件的影响,但从人机交互的角度来看,它确实可以在99.999%的时间内解决问题。对于其他人,我们会责怪比尔:)