[Python-Dev] subprocess crossplatformness and async communication (original) (raw)
Guido van Rossum guido at python.org
Mon Jan 26 19:36:42 CET 2009
- Previous message: [Python-Dev] subprocess crossplatformness and async communication
- Next message: [Python-Dev] subprocess crossplatformness and async communication
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]
On Mon, Jan 26, 2009 at 12:44 AM, anatoly techtonik <techtonik at gmail.com> wrote:
You can't launch a process and communicate with it without blocking at some point. The scenario where you can periodically check output and error pipes without blocking and send input is not supported.
Scenario One: control console program. This implies reading from input and writing replies asyncronously - Popen.stdin, stdout, stderr - stdin.write(), stdout.read() or stderr.read() block script execution if any of the other OS pipe buffers fills up and blocks the child process. Advice is to use communicate(), but it waits for process to exit and hence doesn't allow to send the input based on reply from previous send. Scenario Two: waiting for process that terminates with extensive output blocks - Popen.wait() blocks if the child process generates enough output to a stdout or stderr pipe, advice is to use Popen.communicate() http://docs.python.org/library/subprocess.html#subprocess.Popen.wait - Popen.communicate() - Waits for process to terminate, reads data from stdout and stderr until end-of-file. Cashes data in memory - should not be used for if the data size is large or unlimited. Solution - read(maxsize) and write(maxsize) functions that will return immediately.
Hi Anatoly -- thanks for clarifying your issues. I hope other developers more familiar with subprocess.py will chime in and either help you figure out a way to do this without changes to the subprocess module, or, if that would be too painful, help you develop additional APIs. You could start by proposing a set of changes to subprocess.py and submit them as a patch to bugs.python.org; that is easier to deal with than pointing to a recipe on the Activestate site.
-- --Guido van Rossum (home page: http://www.python.org/~guido/)
- Previous message: [Python-Dev] subprocess crossplatformness and async communication
- Next message: [Python-Dev] subprocess crossplatformness and async communication
- Messages sorted by: [ date ] [ thread ] [ subject ] [ author ]