In the for what it's worth department... Using Linux (RH 6.2), Zope 2.2.2, Python 1.5.2 I wanted to run a unix command from my External Method that I wrote using Python. Digging around in Zope archives and other sources, I came up with a method that worked, of which this is a fragment: import popen2 (r, w) = popen2.popen2('somecommand') w.write(commandinput) w.close() s = r.read() r.close() However, this had the nasty side effect of leaving <defunct> processes around. I discovered one instance on the web of someone having this same problem using Python but not Zope-related. No solution was given. I *think* the really bad thing about these processes (called zombies?) is that they may have certain resources, such as files, held open. And they are said to stay around until the process that created them dies itself. The fix seems to be easier than the original solution. Replace all of the above with import commands s = commands.getoutput('echo ' + commandinput + ' | somecommand') Presto, no more defunct processes. Hopefully a more stable Zope. Keen observers will note the security risk if commandinput contains arbitrary input from users. Wasn't true for me but it might be for you. A curiosity: the description in Python Essential Reference says getoutput uses os.popen2() to execute the command, but I was too lazy^H^H^H^H busy to investigate further. -- Dennis Nichols nichols@tradingconnections.com
participants (1)
-
Dennis Nichols