在 Python 中更改新创建的 HTML 文件的权限时没有此类文件错误
No such file error when changing permissions of newly created HTML file in Python
我正在 运行ning 一个使用 Selenium、Chromedriver 和 Ubuntu 下载 html 文件的进程,然后尝试将该文件的权限更改为 777。但它失败了出现“没有这样的文件或目录”错误。
事情是这样的,因为我使用 openvpn 连接到 VPN 并在此过程中多次断开连接,我需要 运行 它具有根访问权限。
因此我有这个 shell 脚本,我 运行 使用 sudo bash ./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)
我正在 运行ning 一个使用 Selenium、Chromedriver 和 Ubuntu 下载 html 文件的进程,然后尝试将该文件的权限更改为 777。但它失败了出现“没有这样的文件或目录”错误。
事情是这样的,因为我使用 openvpn 连接到 VPN 并在此过程中多次断开连接,我需要 运行 它具有根访问权限。
因此我有这个 shell 脚本,我 运行 使用 sudo bash ./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)