Signals and system

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • T Koster

    #1

    Signals and system

    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
  • Roman Neuhauser

    #2
    Re: Signals and system

    # reply-to-group@use.net / 2005-04-10 20:55:05 +1000:[color=blue]
    > 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?[/color]



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



    "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

    Comment

    • Fredrik Lundh

      #3
      Re: Signals and system

      "T Koster" wrote:
      [color=blue]
      > 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.[/color]

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

      something like:

      import socket, urllib

      list_of_mirrors = ...

      socket.setdefau lttimeout(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>



      Comment

      Working...