Module 'subprocess' may be a better fit for you than fork+exec.
Here's an example with a signal handler
(1) use subprocess, don't fork and exec
(2) maybe this will help:

---
import signal, subprocess

# define the signal handler
def logsignal(signum, frame):
   print "Caught signal"

# register the signal handler for SIGCHLD
signal.signal(signal.SIGCHLD, logsignal)

# run the subprocess in the background
subprocess.Popen(["sleep", "3"])

# Do more stuff
---

The signal handler will be called when the child process ends. Just
register your own handler.

You only need to register the handler once.
If you need this for a single run only, or need different behavior for
different subprocesses, have your signal handler re-register the old
handler (see the docs for module 'signal').

A note about the example: if you run it as is, the parent process will
end before the child process does. Add a call to 'os.wait()' to have it
wait for the child. In your GUI you probably won't want it.

Hope this helps.

awalter1 wrote:
> Hi,
> I develop a graphical user interface (with pyGTK) where a click on a
> button shall launch a program P in background. I want to get the end of
> this program P but I don't want that my HMI be freezed while P is
> running.
> I try to use fork examplesI found on the web, but it seems to not run
> as expected.
> I am not familiar with these techniques in unix as well as python.
> But I suppose that my needs are usual, despite that I don't find
> anything on the web ...
> Is someone can give me a standard way to call a background program,
> wait its end, with an IHM still active ?
> 
> Thank a lot for any idea.

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to