Python 3.x Python 3 os.Rename仅在脚本中使用时拒绝访问

Python 3.x Python 3 os.Rename仅在脚本中使用时拒绝访问,python-3.x,scripting,windows-10,Python 3.x,Scripting,Windows 10,所以我用python编写了一个部署脚本,它基本上只是移动了一堆目录。这可能与我在Windows上工作以及脚本在Windows网络共享中操纵文件和目录有关,也可能与此无关。 此脚本的一个要求是将旧的二进制目录移动到同一Windows网络共享上的备份位置,这就是我遇到的问题所在。我正在使用os.Rename执行此任务。根据bin目录中可执行文件的时间戳生成目标路径 exec_mtime = datetime.fromtimestamp(os.path.getmtime(server_exec_pat

所以我用python编写了一个部署脚本,它基本上只是移动了一堆目录。这可能与我在Windows上工作以及脚本在Windows网络共享中操纵文件和目录有关,也可能与此无关。 此脚本的一个要求是将旧的二进制目录移动到同一Windows网络共享上的备份位置,这就是我遇到的问题所在。我正在使用os.Rename执行此任务。根据bin目录中可执行文件的时间戳生成目标路径

exec_mtime = datetime.fromtimestamp(os.path.getmtime(server_exec_path))
new_dirname = os.path.basename(target_path) + '_' + exec_mtime.strftime('%Y-%m-%d_%H.%M.%S')
backup_target_dir = os.path.join(server_old_dir_path, new_dirname)
if not os.path.exists(backup_target_dir):
    print("{0}: Backing up old software...".format(server))
    os.renames(server_target_path, backup_target_dir)
else:
    print("{0}: A backup already exists with the same version number. Skipping backup.".format(server))
至于我的变量:

target_path == "//server/share/path/to/bin"
server_exec_path == os.path.join(target_path, 'Program.exe')
server_old_dir_path == "//server/share/path/to/bin_backup"
os.rename命令将解析为以下内容:

os.renames("//server/share/path/to/bin", "//server/share/path/to/bin_backup\\bin_2019-11-01_13.02.27")
所以,我的问题是os.Rename总是抛出PermissionError:[WinError 5]访问被拒绝。我已经仔细检查了所有这些目录的权限,我已经拥有了它们。以下是我迄今为止尝试过的一些方法:

  • 在Windows文件浏览器中执行相同的移动。->它起作用了
  • 在python3 shell中运行相同的os.rename命令,并使用脚本提供的相同参数。->令人困惑的是,它起作用了
  • 将os.renames命令放入循环中,如果失败,将重试100次(我在某个地方读到它有时会有所帮助)。->它失败了
  • 在提升的PowerShell中运行脚本。->它失败了
  • 用大锤砸我的笔记本电脑。->我还没试过
  • 我想提到的另一件事是,几天前还没有开始使用的脚本。在此期间,我确实做了一些编辑,但它们与这段代码无关


    这件事我没主意了。因此,如果您能提供任何帮助,我们将不胜感激。

    事实证明,问题是我对脚本所做更改的副作用。我在脚本前面使用python对同一远程机器启动psexec命令(在本地运行taskkill,以便我正在更新的软件可以正常退出),并使用-u标志,该标志更改在远程机器上运行命令的用户。当我删除-u标志时,os.renames再次开始工作。所以我猜运行psexec会改变python脚本在运行os.Rename时使用的用户