[Python-Dev] Re: [PyWX] RE: PyWX (Python AOLserver plugin)

Guido van Rossum guido@beopen.com
Tue, 12 Sep 2000 18:07:40 -0500


> 3.  We address sys.argv (is this just a bug on our part maybe?)

Probably.  The variables are not shared -- thir initial values are the
same.

> 4.  Can we address the os.environ leak similarly?  I'm trying to 
> think of cases where a CGI really should be allowed to add to
> the environment.  Maybe someone needs to set an environment variable
> used by some other program that will be run in a subshell.  If
> so, maybe we can somehow serialize activities that modify os.environ
> in this way?

You each get a copy of os.environ.

Running things in subshells from threads is asking for trouble!

But if you have to, you can write your own os.system() substitute that
uses os.execve() -- this allows you to pass in the environment
explicitly.

You may have to take out (override) the code that automatically calls
os.putenv() when an assignment into os.environment is made.

> Idea:  If Python forks a subshell, it inherits the parent
> process's environment.  That's probably the only time we really want
> to let someone modify the os.environ -- so it can be passed to
> a child.  What if we serialized through the fork somehow like so:
> 
> 1.  Python script wants to set environment, makes call to os.environ
> 1a. We serialize here, so now we are single-threaded
> 2.  Script forks a subshell.
> 2b. We remove the entry we just added and release mutex.
> 3.  Execution continues.
> 
> This probably still won't work because the script might now expect
> these variables to be in the environment dictionary.
> 
> Perhaps we can dummy up a fake os.environ dictionary per interpreter
> thread that doesn't actually change the true UNIX environment?

See above.  You can do it!

--Guido van Rossum (home page: http://www.pythonlabs.com/~guido/)