trouble with sys.exec and sockets/ssh
Richard Cook
rcook at llnl.gov
Fri Feb 21 16:48:48 EST 2003
At 7:52 PM +0000 2/21/03, Donn Cave wrote:
>Quoth Richard Cook <rcook at llnl.gov>:
>
>| I have a problem as follows. I call an executable with os.execv(cmd,
>| args) and it launches fine. However, it then misbehaves. The normal
>| behavior of the program is to fork off children, each of which execs
>| another process (ssh), which creates a process on a remote machine,
>| which connects back to the main process using a socket connection
>| over TCP/IP or UDP. This works fine every time from the shell
>| command line. But it fails from my python script. The behavior when
>| I fork it off using os.execv in python is that the socket connections
>| back "home" from the children fail. Not all of them fail, just many
>| of them. (If any fail, it's a disaster for me.) Clearly the
>| environment that the process I execv from python sees is somehow
>| different than that seen by the same process if I run it from the
>| shell. Can anyone guess as to what I'm doing wrong or not
>| understanding? Thank you.
>
>What does "the socket connections ... fail" mean? They abort
>with "Connection refused" errors?
>
>I don't really have much of a clue, and you may have to post an
>example program before anyone sees the problem. But one thing
>you might try is a little delay - put a time.sleep(1.0) between
>the forks, the real idea being to stagger the incoming connections
>a little. If that helps but isn't attractive, you might be able
>to deal with the problem by increasing the listen() value.
I knew this question would cause confusion. Here is my example program:
import os
os.execv('ensight7.sos', 'ensight7.sos', '-c', 'somehost.somewhere.gov')
That's it. I don't have control over how ensight7.sos forks its
children. I don't do any forking in my program. When I run
ensight7.sos -c somehost.somewhere.gov
from the command line, it works fine. It spawns remote processes
which connect back to itself just fine. But when I launch it from
python with os.execv, it does not work. It's as if the "socket
environment" is different for things exec'd from a pythong script.
Does python modify its environment in any way when it launches?
--
Richard Cook
Lawrence Livermore National Laboratory
Bldg-451 Rm-2043, Mail Stop L-561
7000 East Avenue, Livermore, CA, 94550, USA
phone (925) 423-9605 (work) fax (925) 423-8704
---
Information Management & Graphics Grp., Services & Development Div.,
Integrated Computing & Communications Dept.
(opinions expressed herein are mine and not those of LLNL)
More information about the Python-list
mailing list