wget:如何同时指定--directory prefix和--output documen

2024-04-29 08:38:02 发布

您现在位置:Python中文网/ 问答频道 /正文

当我将-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=/directory/filename,或者,对于项1,/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.

当我删除-Ofile时,操作将正常进行。

我的问题是: 有办法
A) 在wget(首选)或
中同时指定-P-O B) 在包含/字符的-O中插入一个不会导致失败的字符串?

任何帮助都将不胜感激。


Tags: testcomhttppngwwwgooglembwget
3条回答

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)

这一行来自@Jaydev的代码实际上工作得非常出色:

wget.download(url, path_to_output_file)

你应该把dir/000.jpg传递给wget-O

import subprocess
import os.path

subprocess.Popen(['wget', '-O', os.path.join(directory, filename), theImg])

从你的问题中还不完全清楚你是否已经做了类似的事情,但是如果你做了而且仍然失败了,我可以想到两个原因:

  • -O的参数包含一个前导/,使wget失败,因为它没有在/(根目录)中随机创建目录的权限。

  • 您要写入的目录wget不存在。您可以通过首先在Python标准库中使用os.mkdir创建它来确保它存在。

您还可以尝试从Popen调用中删除参数stdout=stderr=,以便可以直接看到错误,或者使用Python打印错误。

相关问题 更多 >