无法使用 os.system 下载文件
Unable to dowload file using os.system
我正在尝试使用 python 中的 os.system 下载文件,但它从未完全下载文件
这是代码
import os
url = 'wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate "https://docs.google.com/uc?export=download&id=0BzQ6rtO2VN95cmNuc2xwUS1wdEE" -O- | sed -rn "s/.*confirm=([0-9A-Za-z_]+).*/\n/p")&id=0BzQ6rtO2VN95cmNuc2xwUS1wdEE" -O cnn_stories_tokenized.zip && rm -rf /tmp/cookies.txt'
os.system(url)
尝试在终端上使用相同命令下载文件时工作正常,是否有任何我应该处理的转义字符?
有一种方法,你可以运行这个命令。我想你可能已经知道答案了。
将 linux 命令保存为 shell 脚本:
例如:vi downloader.sh
wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate "https://docs.google.com/uc?export=download&id=0BzQ6rtO2VN95cmNuc2xwUS1wdEE" -O- | sed -rn "s/.*confirm=([0-9A-Za-z_]+).*/\n/p")&id=0BzQ6rtO2VN95cmNuc2xwUS1wdEE" -O cnn_stories_tokenized.zip && rm -rf /tmp/cookies.txt
保存文件。从 python.
调用此文件
from subprocess import call
call(["bash", "downloader.sh"])
这是可以解决您问题的一种方法,也可以使用 python 库的其他替代方法,例如
requests package
are there any escape characters that I should be handling?
简短回答:是的。
字符串中有 \1 和 \n,Python 试图将其解释为正常的转义序列。
您可以通过将每个反斜杠加倍来手动转义它们,也可以将其变成原始字符串。
要制作原始字符串,请在开头引号 '
处添加 r
(使其成为 r'wget...
)。 "Raw" 意味着 Python 将按原样使用它,而不是尝试解释看起来像转义码的东西(例如 r'\n' == '\n)。在任何你有文件或正则表达式路径的地方,只需使用原始字符串就不用担心自己转义反斜杠,只需将你写的内容粘贴到其他地方!
我正在尝试使用 python 中的 os.system 下载文件,但它从未完全下载文件 这是代码
import os
url = 'wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate "https://docs.google.com/uc?export=download&id=0BzQ6rtO2VN95cmNuc2xwUS1wdEE" -O- | sed -rn "s/.*confirm=([0-9A-Za-z_]+).*/\n/p")&id=0BzQ6rtO2VN95cmNuc2xwUS1wdEE" -O cnn_stories_tokenized.zip && rm -rf /tmp/cookies.txt'
os.system(url)
尝试在终端上使用相同命令下载文件时工作正常,是否有任何我应该处理的转义字符?
有一种方法,你可以运行这个命令。我想你可能已经知道答案了。
将 linux 命令保存为 shell 脚本:
例如:vi downloader.sh
wget --load-cookies /tmp/cookies.txt "https://docs.google.com/uc?export=download&confirm=$(wget --quiet --save-cookies /tmp/cookies.txt --keep-session-cookies --no-check-certificate "https://docs.google.com/uc?export=download&id=0BzQ6rtO2VN95cmNuc2xwUS1wdEE" -O- | sed -rn "s/.*confirm=([0-9A-Za-z_]+).*/\n/p")&id=0BzQ6rtO2VN95cmNuc2xwUS1wdEE" -O cnn_stories_tokenized.zip && rm -rf /tmp/cookies.txt
保存文件。从 python.
调用此文件from subprocess import call
call(["bash", "downloader.sh"])
这是可以解决您问题的一种方法,也可以使用 python 库的其他替代方法,例如
requests package
are there any escape characters that I should be handling?
简短回答:是的。
字符串中有 \1 和 \n,Python 试图将其解释为正常的转义序列。
您可以通过将每个反斜杠加倍来手动转义它们,也可以将其变成原始字符串。
要制作原始字符串,请在开头引号 '
处添加 r
(使其成为 r'wget...
)。 "Raw" 意味着 Python 将按原样使用它,而不是尝试解释看起来像转义码的东西(例如 r'\n' == '\n)。在任何你有文件或正则表达式路径的地方,只需使用原始字符串就不用担心自己转义反斜杠,只需将你写的内容粘贴到其他地方!