[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

AltStyle によって変換されたページ (->オリジナル) /