urllib.urlretrieve never returns???
Steven D'Aprano
steve+comp.lang.python at pearwood.info
Mon Mar 19 19:26:20 EDT 2012
On Mon, 19 Mar 2012 20:32:03 +0100, Laszlo Nagy wrote:
> The pythonw.exe may not have the rights to access network resources.
>>> Have you set a default timeout for sockets?
>>>
>>> import socket
>>> socket.setdefaulttimeout(10) # 10 seconds
> I have added pythonw.exe to allowed exceptions. Disabled firewall
> completely. Set socket timeout to 10 seconds. Still nothing.
>
> urllib.urlretrieve does not return from call....
>
> any other ideas?
I'm sorry if I have missed something, or making suggestions you have
already tried, but your original post describing the problem is missing
from my news server.
I gather you are running urlretrieve in a separate thread, inside a GUI?
I have learned that whenever I have inexplicable behaviour in a function,
I should check my assumptions. In this case, (1) are you sure you have
the right urlretrieve, and (2) are you sure that your self.Log() method
is working correctly? Just before the problematic call, do this:
# was:
fpath = urllib.urlretrieve(imgurl)[0]
# becomes:
print(urllib.__file__, urlretrieve)
self.Log(urllib.__file__, urlretrieve)
fpath = urllib.urlretrieve(imgurl)[0]
and ensure that you haven't accidentally shadowed them with something
unexpected. Does the output printed to the console match the output
logged?
What happens if you take the call to urlretrieve out of the thread and
call it by hand? Run urllib.urlretrieve(imgurl) directly in the
interactive interpreter. Does it still hang forever?
When you say it "never" returns, do you mean *never* or do you mean "I
gave up waiting after five minutes"? What happens if you leave it to run
all day?
Perhaps it returns after e.g. seven hours, which would be a mystery in
itself, but at least you have perturbed the problem and have another data
point. Maybe it isn't dead, just really slow. How big are the files you
are trying to retrieve? Try retrieving a really small file. Then try
retrieving a non-existent file.
What happens if you call urlretrieve with a reporthook argument? Does it
print anything?
What happens if you try to browse to imgurl in your web browser? Are you
sure the problem is with urlretrieve and not the source?
--
Steven
More information about the Python-list
mailing list