Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/306.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_Windows - Fatal编程技术网

Python:当目标使用此文件时复制此文件

Python:当目标使用此文件时复制此文件,python,windows,Python,Windows,我需要定期更新SharePoint上的联机Excel文件。用户打开此文件时出现问题。在这种情况下,我收到的Windows错误消息如下: 是否可以在Python脚本中处理此类错误?我所说的句柄是指在一段时间后,通过使用time.sleep函数继续尝试保存文件。我尝试了最常用的方法: import shutil try: shutil.copy2('Track_Changes_Testing.xlsx', destination_on_sharepoint) except Excepti

我需要定期更新SharePoint上的联机Excel文件。用户打开此文件时出现问题。在这种情况下,我收到的Windows错误消息如下:

是否可以在Python脚本中处理此类错误?我所说的句柄是指在一段时间后,通过使用
time.sleep
函数继续尝试保存文件。我尝试了最常用的方法:

import shutil

try:
    shutil.copy2('Track_Changes_Testing.xlsx', destination_on_sharepoint)
except Exception as err:
    print(err)

但我只看到弹出的Windows错误消息

您可以使用
time.sleep()
和一个while循环来完成此操作,就像您要求的那样。但是请注意,如果继续使用该文件,该脚本将永远运行。我不确定这种行为是有意的还是理想的

import shutil 
import time
import sys

while True:
    print("Runned") #debugging
    try:
        shutil.copy2('Track_Changes_Testing.xlsx', destination_on_sharepoint) 
        break
    except (OSError, IOError):
         print("OSError or IOError")
        # wair 5 min before trying again
        time.sleep(300)
    except shutil.Error as e:
        print(f"Error while copying: {e}" )
        # wair 5 min before trying again
        time.sleep(300)
    except: 
        print("Unexpected error:", sys.exc_info()[0])
        # wair 5 min before trying again
        time.sleep(300) 

您可以使用
time.sleep()
和while循环来完成这项工作,就像您要求的那样。但是请注意,如果继续使用该文件,该脚本将永远运行。我不确定这种行为是有意的还是理想的

import shutil 
import time
import sys

while True:
    print("Runned") #debugging
    try:
        shutil.copy2('Track_Changes_Testing.xlsx', destination_on_sharepoint) 
        break
    except (OSError, IOError):
         print("OSError or IOError")
        # wair 5 min before trying again
        time.sleep(300)
    except shutil.Error as e:
        print(f"Error while copying: {e}" )
        # wair 5 min before trying again
        time.sleep(300)
    except: 
        print("Unexpected error:", sys.exc_info()[0])
        # wair 5 min before trying again
        time.sleep(300) 

循环不起作用。只完成第一次迭代,然后停止,并显示Windows错误消息。似乎“except”并没有捕捉到这个异常。添加了更多的异常。。。请再试一次,并报告您遇到了什么错误?仍然循环不起作用,并且Python中的打印不会产生任何错误。也许其他复制文件的Python函数会捕捉到这一点,所以您不会得到错误,代码会执行吗?然后检查文件是否被复制?尝试在while之后直接添加打印,看看它是否执行循环。您也可以尝试
copy
而不是
copy2
循环不起作用。只完成第一次迭代,然后停止,并显示Windows错误消息。似乎“except”并没有捕捉到这个异常。添加了更多的异常。。。请再试一次,并报告您遇到了什么错误?仍然循环不起作用,并且Python中的打印不会产生任何错误。也许其他复制文件的Python函数会捕捉到这一点,所以您不会得到错误,代码会执行吗?然后检查文件是否被复制?尝试在while之后直接添加打印,看看它是否执行循环。您也可以尝试
copy
而不是
copy2
如果其他用户打开并修改了该文件,是否确实要替换该文件,从而放弃他们的工作?可能需要标记为手动解决。该对话框可能是一个严重错误对话框,可通过
导入msvcrt禁用
msvcrt.SetErrorMode(msvcrt.SEM\u FAILCRITICALERRORS)
。使用此错误设置时,写入操作将正常失败,并允许Python引发脚本可以处理的异常。@将联机打开Excel的ErykSun用户不需要编辑它。他们应该定期打开它,以检查来自Python脚本的更新。您建议使用
msvcrt
静音Windows错误对话框,但我仍然无法捕获异常。循环(由Björn B提出)不起作用。如果其他用户打开并修改了该文件,您真的想替换它,从而放弃他们的工作吗?可能需要标记为手动解决。该对话框可能是一个严重错误对话框,可通过
导入msvcrt禁用
msvcrt.SetErrorMode(msvcrt.SEM\u FAILCRITICALERRORS)
。使用此错误设置时,写入操作将正常失败,并允许Python引发脚本可以处理的异常。@将联机打开Excel的ErykSun用户不需要编辑它。他们应该定期打开它,以检查来自Python脚本的更新。您建议使用
msvcrt
静音Windows错误对话框,但我仍然无法捕获异常。循环(由Björn B提出)不起作用。