By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
455,587 Members | 1,580 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 455,587 IT Pros & Developers. It's quick & easy.

Signals and system

P: n/a
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
Jul 18 '05 #1
Share this Question
Share on Google+
2 Replies


P: n/a
# re************@use.net / 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"

--
How many Vietnam vets does it take to screw in a light bulb?
You don't know, man. You don't KNOW.
Cause you weren't THERE. http://bash.org/?255991
Jul 18 '05 #2

P: n/a
"T Koster" wrote:
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>

Jul 18 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.