在Python中更改新创建的HTML文件的权限时没有此类文件错误

在Python中更改新创建的HTML文件的权限时没有此类文件错误,python,selenium,permissions,selenium-chromedriver,Python,Selenium,Permissions,Selenium Chromedriver,我正在运行一个进程,使用Selenium、Chromedriver和Ubuntu下载一个html文件,然后尝试将该文件的权限更改为777。但它失败了,并出现“没有这样的文件或目录”错误 事情是这样的,因为我使用openvpn连接到一个VPN,并且在这个过程中断开了几次连接,所以我需要使用root访问来运行它 因此,我使用sudobash运行这个shell脚本。/nameofscript.sh: #!/bin/bash source ~/imageTextAlgorithms/bin/activa

我正在运行一个进程,使用Selenium、Chromedriver和Ubuntu下载一个html文件,然后尝试将该文件的权限更改为777。但它失败了,并出现“没有这样的文件或目录”错误

事情是这样的,因为我使用openvpn连接到一个VPN,并且在这个过程中断开了几次连接,所以我需要使用root访问来运行它

因此,我使用sudobash运行这个shell脚本。/nameofscript.sh:

#!/bin/bash
source ~/imageTextAlgorithms/bin/activate
python ~/imageTextAlgorithms/DownloadURLs.py
连接到VPN并使用Selenium下载所需的文件后,我运行以下操作来保存文件并更改权限:

filename = os.path.join(parentdir,"data","HTML",get_random_string(10))      
pyautogui.hotkey('ctrl', 's')
time.sleep(1)
pyautogui.typewrite(filename)
pyautogui.hotkey('enter')

call('sudo chmod 777 ' + filename + ".html", shell=True)
call('sudo chmod -R 777 ' +  filename + "_files", shell=True)
这里parentdir是我的代码所在的~/imageTextAlgorithms目录的完整绝对路径,get_random_string(n)生成一个由n个小写字符组成的随机字符串,我使用pyautogui使浏览器在保存时下载所有图像和css,而不是只保存html源文件

这些调用(调用函数来自子进程)没有给我这样的文件错误,但是如果我从操作系统命令行进行完全相同的调用,它是成功的。此外,我已经尝试使用python函数os.chmod,但没有成功


为什么会这样?我做错了什么?

正如furas在评论中指出的,这是一个时间问题。 事实证明,pyautogui按enter键进入保存对话框和系统中的文件之间有一段等待时间,因为在保存页面时,chrome会再次下载所有内容。 因此,我为此更改了对sudo chmod的调用,现在它按预期工作:

    while True:
                try:
                    os.chmod( filename + ".html",0o777)
                    os.chmod( filename + "_files",0o777)
                    for dirpath, dirnames, filenames in os.walk( filename + "_files"):
                        for dirname in dirnames:
                            path = os.path.join(dirpath, dirname)
                            os.chmod(path, 0o777)
                        for filename in filenames:
                            path = os.path.join(dirpath, filename)
                            os.chmod(path, 0o777)
                    break
                except Exception as e:
                    sleep(1)

可能首先检查
os.listdir()
以查看此文件是否存在。可能您在错误的文件夹中,或者它在下载时使用了不同的名称,然后重新命名。或者你可能需要一些
时间。sleep()
以便有时间完成工作。正如我在下面的回答中所建议的,这是一个时间问题。非常感谢你的建议!