[Python-Dev] PEP 324: popen5 - New POSIX process module

Martin v. Loewis martin at v.loewis.de
Sat Jan 3 16:50:24 EST 2004


Peter Åstrand wrote:
>     This PEP describes a new module for starting and communicating
>     with processes on POSIX systems.

I see many aspects in this PEP that improve the existing implementation
without changing the interface. I would suggest that you try to enhance
the existing API (making changes to its semantics where reasonable),
instead of coming up with a completely new module.

With that approach, existing applications could use these features
with no or little change.

>     - One "unified" module provides all functionality from previous
>       functions.

I doubt this is a good thing. Different applications have different
needs - having different API for them is reasonable.

> 
>     - Cross-process exceptions: Exceptions happening in the child
>       before the new process has started to execute are re-raised in
>       the parent.  This means that it's easy to handle exec()
>       failures, for example.  With popen2, for example, it's
>       impossible to detect if the execution failed.

This is a bug in popen2, IMO. Fixing it is a good thing, but does not
require a new module.

>     - A hook for executing custom code between fork and exec.  This
>       can be used for, for example, changing uid.

Such a hook could be merged as a keyword argument into the existing
API.

>     - No implicit call of /bin/sh.  This means that there is no need
>       for escaping dangerous shell meta characters.

This could be an option to the existing API. Make sure it works on
all systems, though.

>     - All combinations of file descriptor redirection is possible.
>       For example, the "python-dialog" [2] needs to spawn a process
>       and redirect stderr, but not stdout.  This is not possible with
>       current functions, without using temporary files.

Sounds like a new function on the popen2 module.

>     - With popen5, it's possible to control if all open file
>       descriptors should be closed before the new program is
>       executed.

This should be an option on the existing API.

>     - Support for connecting several subprocesses (shell "pipe").

Isn't this available already, as the shell supports pipe creation,
anyway?

>     - Universal newline support.

This should be merged into the existing code.

>     - A communicate() method, which makes it easy to send stdin data
>       and read stdout and stderr data, without risking deadlocks.
>       Most people are aware of the flow control issues involved with
>       child process communication, but not all have the patience or
>       skills to write a fully correct and deadlock-free select loop.

Isn't asyncore supposed to simplify that?

So in short, I'm -1 on creating a new module, but +1 on merging
most of these features into the existing code base - they are good
features.

Regards,
Martin




More information about the Python-Dev mailing list