当我使用-P
或-O
单独使用wget
时,一切都按宣传方式工作。
$: wget -P "test" http://www.google.com/intl/en_com/images/srpr/logo3w.png
Saving to: `test/logo3w.png'
$: wget -O "google.png" http://www.google.com/intl/en_com/images/srpr/logo3w.png
2012-01-23 21:47:33 (1.20 MB/s) - `google.png' saved [7007/7007]
但是,将两者结合使wget
忽略-P
。
$: wget -P "test" -O "google.png" http://www.google.com/intl/en_com/images/srpr/logo3w.png
2012-01-23 21:47:51 (5.87 MB/s) - `google.png' saved [7007/7007]
我为目录(由URL的最后一个块生成)和文件名(通过计数循环生成)设置了一个变量,使得http://www.google.com/aaa/bbb/ccc
产生file
= {{1或者,对于第1项,/directory/filename
将此代入代码时:
/ccc/000.jpg
Popen(['wget', '-O', file, theImg], stdout=PIPE, stderr=STDOUT)
默默地失败(在循环的每次迭代中)。
当我打开调试wget
并记录-d
时,每次迭代都会打印出来
-a log.log
当我删除DEBUG output created by Wget 1.13.4 on darwin10.8.0.
和-O
时,操作会正常进行。
我的问题是:
有办法吗?
A)在file
(首选)或
中指定-P
AND -O
B)将一个字符串插入包含wget
的{{1}} - 不会导致其失败的字符?
任何帮助都将不胜感激。
答案 0 :(得分:4)
wget.download(..)的文档:
def download(url, out=None, bar=bar_adaptive):
"""High level function, which downloads URL into tmp file in current
directory and then renames it to filename autodetected from either URL
or HTTP headers.
:param bar: function to track download progress (visualize etc.)
:param out: output filename or directory
:return: filename where URL is downloaded to
"""
...
使用以下调用将文件下载到具有自定义文件名的特定目录(已存在):
wget.download(url, path_to_output_file)
如果您希望函数调用抽象出目录创建(如果已经存在),则使用:
urllib.urlretrieve(url, path_to_output_file)
答案 1 :(得分:1)
您应该将dir/000.jpg
传递给-O
的{{1}}:
wget
从您的问题来看,您是否已经在做类似的事情并不完全清楚,但如果您是,但仍然失败,我可以想到两个原因:
import subprocess
import os.path
subprocess.Popen(['wget', '-O', os.path.join(directory, filename), theImg])
的参数包含一个前导-O
,使/
失败,因为它无权在wget
(root)中随机创建目录
您告诉/
写入的目录不存在。您可以通过在Python标准库中使用wget
创建它来确保它存在。
您还可以尝试从os.mkdir
调用中删除参数stdout=
和stderr=
,以便直接查看错误,或使用Python打印错误。
答案 2 :(得分:0)
来自@Jaydev的这行代码实际上非常出色:
wget.download(url, path_to_output_file)