如何解决在Python中更改新创建的HTML文件的权限时,没有此类文件错误
我正在运行一个进程,该进程使用Selenium,Chromedriver和Ubuntu下载一个html文件,然后尝试将该文件的权限更改为777。但是失败,并出现“无此文件或目录”错误。
事实是这样,因为我使用openvpn连接到VPN并在此过程中断开了几次连接,所以我需要使用root用户访问权限来运行它。
因此,我有一个使用sudo bash运行的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源文件。
这些调用(调用函数来自子进程)不会给我这样的文件错误,但是如果我从OS命令行进行完全相同的调用,则它会成功。另外,我已经尝试使用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)
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。