因此,我用python编写了一个部署脚本,该脚本实际上只是在周围移动了一堆目录。我在Windows上工作并且脚本操作Windows网络共享中的文件和目录可能无关紧要。 该脚本的要求是将旧的二进制目录移动到同一Windows网络共享上的备份位置,这就是我遇到的问题。我正在为此任务使用os.renames。目标路径是根据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.renames命令将解析为以下内容:
os.renames("//server/share/path/to/bin","//server/share/path/to/bin_backup\\bin_2019-11-01_13.02.27")
所以,我的问题是os.renames总是抛出PermissionError:[WinError 5]访问被拒绝。我已经仔细检查了所有这些目录的权限,并拥有它们。到目前为止,我尝试了一些操作:
- 在Windows文件浏览器中执行相同的动作。 ->可以。
- 在python3 shell中运行相同的os.renames命令,并使用脚本将赋予它的相同参数。 ->容易混淆。
- 将os.renames命令放入循环中,以在失败时重试100次(我在某处读到它有时会有所帮助)。 ->失败。
- 在提升的PowerShell中运行脚本。 ->失败。
- 用大锤击打我的笔记本电脑。 ->还没尝试。
我要提到的另一件事是甚至几天前就可以使用的脚本。在此期间,我确实进行了一些编辑,但它们与本节代码无关。
我对此一无所知。因此,您能提供的任何帮助将不胜感激。