仅在脚本中使用时,Python 3 os.renames访问被拒绝

因此,我用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]访问被拒绝。我已经仔细检查了所有这些目录的权限,并拥有它们。到目前为止,我尝试了一些操作:

  1. 在Windows文件浏览器中执行相同的动作。 ->可以。
  2. 在python3 shell中运行相同的os.renames命令,并使用脚本将赋予它的相同参数。 ->容易混淆。
  3. 将os.renames命令放入循环中,以在失败时重试100次(我在某处读到它有时会有所帮助)。 ->失败。
  4. 在提升的PowerShell中运行脚本。 ->失败。
  5. 用大锤击打我的笔记本电脑。 ->还没尝试。

我要提到的另一件事是甚至几天前就可以使用的脚本。在此期间,我确实进行了一些编辑,但它们与本节代码无关。

我对此一无所知。因此,您能提供的任何帮助将不胜感激。

sibo36158 回答:仅在脚本中使用时,Python 3 os.renames访问被拒绝

事实证明,问题出在我对脚本所做的更改的副作用。我使用python在脚本中较早的同一台远程计算机上启动了psexec命令(在本地运行taskkill,以便我正在更新的软件可以正常退出),并且我使用了-u标志,该标志更改了使用该命令的用户在远程计算机上运行。当我删除-u标志时,os.renames重新开始工作。因此,我猜测运行psexec会以某种方式更改运行os.renames时python脚本使用的用户。

本文链接:https://www.f2er.com/3150131.html

大家都在问