Small socket problem
Gabriel Genellina
gagsl-py2 at yahoo.com.ar
Mon Feb 9 09:10:13 EST 2009
En Mon, 09 Feb 2009 07:43:36 -0200, John O'Hagan <research at johnohagan.com>
escribió:
> I'm using the socket module (python 2.5) like this (where 'options'
> refers to
> an optparse object) to connect to the Fluidsynth program:
>
> host = "localhost"
> port = 9800
> fluid = socket(AF_INET, SOCK_STREAM)
> try:
> fluid.connect((host, port)) #Connect if fluidsynth is
> running
> except BaseException:
> print "Connecting to fluidsynth..." #Or start fluidsynth
> soundfont = options.soundfont
> driver = options.driver
> Popen(["fluidsynth", "-i", "-s", "-g", "0.5",
> "-C", "1", "-R", "1", "-l", "-a", driver, "-j",
> soundfont])
> timeout = 50
> while 1:
> timeout -= 1
> if timeout == 0:
> print "Problem with fluidsynth: switching to
> synth."
> play_method = "synth"
> break
> try:
> fluid.connect((host, port))
> except BaseException:
> sleep(0.05)
> continue
> else:
> break
>
> (I'm using BaseException because I haven't been able to discover what
> exception class[es] socket uses).
Usually socket.error, which is a subclass of IOError, but others might
happen too I think. In any case, the most generic except clause you should
use is
try:
except Exception: ...
(because you usually don't want to catch KeyboardInterrupt nor SystemExit,
that is, let Ctrl-C and sys.exit() do their work)
> The problem is that this fails to connect ( the error is "111: Connection
> refused") the first time I run it after booting if fluidsynth is not
> already
> running, no matter how long the timeout is; after Ctrl-C'ing out of the
> program, all subsequent attempts succeed. Note that fluidsynth need not
> be
> running for a success to occur.
Always the same exception? In both lines?
--
Gabriel Genellina
More information about the Python-list
mailing list