wget的使用Python的时间限制(wget with python time limit)

2019-09-23 02:53发布

我有我通过wget来下载网址大文本文件。 我已经写了一个小python脚本基本上通过每个域名循环和使用wget(使用os.system(“wget的” + URL))下载。 但问题是,wget的只是挂在连接上如果远程服务器不连接后回复。 如何设置在这样的情况下,有时间限制? 我想一段时间后终止了wget如果远程服务器没有连接后回复。

问候,

Answer 1:

这似乎是少了约蟒蛇的问题,更多的是关于如何使用wget问题。 在GNU wget的,你可能在使用,重试默认数量为20.你可以使用-t设置trieds,也许wget的,如果该文件无法下载-T0会很快跳过它。 或者,你可以使用-S标志来获得断绝响应,并有蟒蛇作出适当的反应。 但是,最有用的选项,你会-T或超时设置,为-T10有它在十秒钟后超时并继续前进。

编辑:

如果你正在做的是通过迭代列表并下载网址我只想用wget的,没有必要在这里蟒的名单。 事实上,你可以在一行做

awk '{print "wget -t2 -T5 --append-output=wget.log \"" $0 "\""}' listOfUrls | bash

这是什么做的是通过URL列表运行,并调用了wget,其中wget的尝试下载文件两次,并终止连接前,等待5秒,这也追加到wget.log响应,您可以grep在最终找一个404错误。



Answer 2:

使用--timeout seconds参数限制时间的请求。 您可以更具体和使用--connect-timeout seconds如果需要的话。 见wget的手册以获取更多信息。



Answer 3:

你不需要使用外部工具如wget 。 使用内置urllib2下载文件。 该文档可在这里



Answer 4:

你不应该调用wget二进制从Python中做一个任务是这样的。 使用Python的可用HTTP图书馆之一,而不是,您将得到更好的错误处理和控制。

urllib2 ( 官方的文档 , 失踪手册 ),这是标准库的一部分。

然而,我强烈建议使用优秀的requests模块来代替。 它有一个非常清晰的API,使得简单的任务简单,因为他们应该的,但仍然提供了一吨的灵活性和细粒度控制。

使用requests模块,你可以指定超时使用(秒) timeout像这样的关键字参数:

response = requests.get(url, timeout=0.02)

如果超过了超时值时, Timeout将引发异常,你将需要捕获并处理它,你喜欢的任何方式。

import requests
from requests.exceptions import Timeout, ConnectionError

TIMEOUT = 0.02

urls = ['http://www.stackoverflow.com',
        'http://www.google.com']

for url in urls:
    try:
        response = requests.get(url, timeout=TIMEOUT)
        print "Got response %s" % response.status_code
        response_body = response.content
    except (ConnectionError, Timeout), e:
        print "Request for %s failed: %s" % (url, e)
        # Handle however you need to ...

输出示例:

Request for http://www.stackoverflow.com failed: Request timed out.
Request for http://www.google.com failed: Request timed out.


文章来源: wget with python time limit
标签: python wget