Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/363.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python关闭其他用户可能已打开的文件_Python - Fatal编程技术网

Python关闭其他用户可能已打开的文件

Python关闭其他用户可能已打开的文件,python,Python,我需要写入另一个用户可能已打开的文件。因此,我认为我需要一种尝试写入的方法,如果失败,请为所有用户关闭该文件,然后再次写入。Python中有没有一种方法可以做到这一点 with open(biFile, 'w') as consolidate: outputData.to_csv(consolidate, header=True, index=False) 我有时会遇到的错误是: PermissionError Traceba

我需要写入另一个用户可能已打开的文件。因此,我认为我需要一种尝试写入的方法,如果失败,请为所有用户关闭该文件,然后再次写入。Python中有没有一种方法可以做到这一点

with open(biFile, 'w') as consolidate:
        outputData.to_csv(consolidate, header=True, index=False)
我有时会遇到的错误是:

PermissionError                           Traceback (most recent call last)
<ipython-input-53-6a5da56e94fb> in <module>()
    373             consolidateDate = consolidateDate + datetime.timedelta(days=32)
    374             consolidateDate = consolidateDate.replace(day=1)
--> 375     with open(biFile, 'w') as consolidate:
    376         outputData.to_csv(consolidate, header=True, index=False)
    377     #=================================================================================

PermissionError: [Errno 13] Permission denied: '\\\\SERVERNAME\\FOLDERNAME\\File.csv'
PermissionError回溯(最近一次调用)
在()
373 consolidateDate=consolidateDate+datetime.timedelta(天数=32)
374合并日期=合并日期。替换(第1天)
-->375,开放式(双文件,'w')作为合并:
376 outputData.to_csv(合并,标题=True,索引=False)
377     #=================================================================================
权限错误:[Errno 13]权限被拒绝:'\\\SERVERNAME\\FOLDERNAME\\File.csv'
我最初的想法是,如果这个文件是打开的,就直接跳过对它的写入。脚本每小时运行一次,所以没什么大不了的。但是一位同事刚刚告诉我,我们的一位实习生曾经写过一个脚本,该脚本将检查是否有人打开了一个文件,如果文件在3分钟内没有关闭,脚本将关闭它。同样的功能在这里将是伟大的


我还考虑将该文件只读给除运行此脚本的用户之外的所有人,但它最终将在服务器级别运行,我不确定我有多喜欢机器人成为共享驱动器上文件的唯一所有者。

如果写入失败,我只需跳过写入即可解决此问题。这个脚本每小时运行一次,所以在更好的答案出现之前,这不是什么大问题

    tryCount = 0
    while tryCount < 5:
        try:
            with open(biFile, 'w') as consolidate:
                outputData.to_csv(consolidate, header=True, index=False)
            tryCount = 5
        except:
            tryCount = tryCount =+ 1
            if tryCount < 5:
                logEvent('BI File Write Error #'+str(tryCount), False)
            else:
                logEvent('BI File Write Failed', False)
tryCount=0
当tryCount<5时:
尝试:
以开放式(双文件,'w')作为合并:
outputData.to_csv(合并,标题=True,索引=False)
tryCount=5
除:
tryCount=tryCount=+1
如果tryCount<5:
logEvent('BI文件写入错误#'+str(tryCount),False)
其他:
logEvent('BI文件写入失败',False)

我认为“为其他用户关闭文件”是不可能的。写入别人打开的文件不应该是问题。确保每个人对文件都有一个一致的视图,这是您需要协作实现的。那么我如何避免上面提到的错误呢?使用try-except语句捕获错误,然后再次运行这不会导致一个恒定的循环,直到文件最终由打开它的人关闭为止?