wget:如何指定--directory-prefix和--output-document

时间:2012-01-24 06:05:00

标签: python wget

当我使用-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}} - 不会导致其失败的字符?

任何帮助都将不胜感激。

3 个答案:

答案 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)