Signals and system

T

T Koster

Hi folks,

My python program needs to download a number of files. Each file comes
as a list of mirrors of that file.

Currently, I am using system (os.system) to run wget. The mechanism is
in a loop, so that it will try all the mirrors while wget is exiting
with a non-zero exit status. This is working fine as long as the user
feels there is no need to interrupt it.

If wget receives a SIGINT, it stops (as expected) and returns non-zero
(1 from memory). The call to system returns the same status code,
indicating that wget failed, but the program has no knowledge that it
was a signal the killed wget, rather than a failed download, and as such
it tries the next mirror. I would like to be notified if wget received
any signals, so that the user doesn't need to repetitively press Ctrl-C
for each and every mirror to get the downloading process to stop.

Can someone point me in the right direction?

Thanks in advance,
Koster
 
R

Roman Neuhauser

# (e-mail address removed) / 2005-04-10 20:55:05 +1000:
Hi folks,

My python program needs to download a number of files. Each file comes
as a list of mirrors of that file.

Currently, I am using system (os.system) to run wget. The mechanism is
in a loop, so that it will try all the mirrors while wget is exiting
with a non-zero exit status. This is working fine as long as the user
feels there is no need to interrupt it.

If wget receives a SIGINT, it stops (as expected) and returns non-zero
(1 from memory). The call to system returns the same status code,
indicating that wget failed, but the program has no knowledge that it
was a signal the killed wget, rather than a failed download, and as such
it tries the next mirror. I would like to be notified if wget received
any signals, so that the user doesn't need to repetitively press Ctrl-C
for each and every mirror to get the downloading process to stop.

Can someone point me in the right direction?

http://docs.python.org/lib/os-process.html#l2h-1682

"On Unix, the return value is the exit status of the process encoded
in the format specified for wait()."

http://docs.python.org/lib/os-process.html#l2h-1684

"return a tuple containing its pid and exit status indication: a
16-bit number, whose low byte is the signal number that killed the
process, and whose high byte is the exit status (if the signal
number is zero); the high bit of the low byte is set if a core file
was produced"
 
F

Fredrik Lundh

T Koster said:
Currently, I am using system (os.system) to run wget. The mechanism is
in a loop, so that it will try all the mirrors while wget is exiting
with a non-zero exit status. This is working fine as long as the user
feels there is no need to interrupt it.

any reason you cannot use urllib2 (or urllib) with a socket timeout
instead?

something like:

import socket, urllib

list_of_mirrors = ...

socket.setdefaulttimeout(10)

for url in list_of_mirrors:
try:
f = urllib.urlopen(url)
except IOError:
print "trying another mirror"
else:
break

# copy from the f stream to local file

might work.

</F>
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,744
Messages
2,569,483
Members
44,903
Latest member
orderPeak8CBDGummies

Latest Threads

Top