[EMAIL PROTECTED] wrote: > If you're talking about a Python function registered as a handler by > signal.signal, then there should not be any restrictions on what you do > in that function. > > Here's a small program I wrote: > #------------------------------------------------------------------------ > import os, signal, time > > def h(*args): os.write(fd, "data\n"); > > print "my pid is", os.getpid() > subproc = os.popen("cat -n", "w") > fd = subproc.fileno() > > signal.signal(signal.SIGINT, h) > > while 1: > time.sleep(1) > #------------------------------------------------------------------------ > > I ran this and in another terminal I repeatedly typed 'kill -INT nnnn', > where nnnn is the pid printed by my program. Each time, another line is > output by 'cat'. > > When I try to deliver the signal by hitting ctrl-c in that terminal, the > first time nothing happens and the second time I get the message > OSError: [Errno 32] Broken pipe > in this case, I believe that the first signal was delivered to cat, > causing it to exit. The second signal was delivered to the python > program, which obviously couldn't write to the stdin of a process that > had exited.
Ah! ofcourse... It makes sense now to me. I, indeed, used Ctrl-C, and assumed it would go to python, not the child process. Wrong assumption ofcourse. Thanks. Bram > > Jeff -- http://mail.python.org/mailman/listinfo/python-list