在Python中更改新创建的HTML文件的权限时没有此类文件错误
我正在运行一个进程,使用Selenium、Chromedriver和Ubuntu下载一个html文件,然后尝试将该文件的权限更改为777。但它失败了,并出现“没有这样的文件或目录”错误 事情是这样的,因为我使用openvpn连接到一个VPN,并且在这个过程中断开了几次连接,所以我需要使用root访问来运行它 因此,我使用sudobash运行这个shell脚本。/nameofscript.sh:在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
#!/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()
以便有时间完成工作。正如我在下面的回答中所建议的,这是一个时间问题。非常感谢你的建议!