[Python-checkins] r74736 - peps/trunk/pep-3145.txt

brett.cannon python-checkins at python.org
Wed Sep 9 18:17:45 CEST 2009


Author: brett.cannon
Date: Wed Sep  9 18:17:44 2009
New Revision: 74736

Log:
Remove backticks from a plaintext PEP.

Modified:
   peps/trunk/pep-3145.txt

Modified: peps/trunk/pep-3145.txt
==============================================================================
--- peps/trunk/pep-3145.txt	(original)
+++ peps/trunk/pep-3145.txt	Wed Sep  9 18:17:44 2009
@@ -12,10 +12,10 @@
 
 Abstract:
 
-    In its present form, the ``subprocess.Popen`` implementation is prone to
+    In its present form, the subprocess.Popen implementation is prone to
     dead-locking and blocking of the parent Python script while waiting on data
     from the child process. This PEP proposes to make
-    ``subprocess.Popen`` more asynchronous to help alleviate these
+    subprocess.Popen more asynchronous to help alleviate these
     problems.
 
 Motivation:
@@ -26,7 +26,7 @@
     blocking to wait for the program to produce data [1] [2] [3].  The current
     behavior of the subprocess module is that when a user sends or receives
     data via the stdin, stderr and stdout file objects, dead locks are common
-    and documented [4] [5].  While ``communicate`` can be used to alleviate some of
+    and documented [4] [5].  While communicate can be used to alleviate some of
     the buffering issues, it will still cause the parent process to block while
     attempting to read data when none is available to be read from the child
     process.  
@@ -34,14 +34,13 @@
 Rationale:
 
     There is a documented need for asynchronous, non-blocking functionality in
-    ``subprocess.Popen`` [6] [7] [2] [3].  Inclusion of the code would improve the
+    subprocess.Popen [6] [7] [2] [3].  Inclusion of the code would improve the
     utility of the Python standard library that can be used on Unix based and
     Windows builds of Python.  Practically every I/O object in Python has a
     file-like wrapper of some sort.  Sockets already act as such and for
-    strings there is ``StringIO``.  Popen can be made to act like a file by simply
-    using the methods attached the the ``subprocess.Popen.stderr``,
-    ``stdout`` and
-    ``stdin`` file-like objects.  But when using the read and write methods of
+    strings there is StringIO.  Popen can be made to act like a file by simply
+    using the methods attached the the subprocess.Popen.stderr, stdout and
+    stdin file-like objects.  But when using the read and write methods of
     those options, you do not have the benefit of asynchronous I/O.  In the
     proposed solution the wrapper wraps the asynchronous methods to mimic a
     file object.
@@ -53,43 +52,36 @@
     the problems I have come across in the development process [10].  
 
     I have been working on implementing non-blocking asynchronous I/O in the
-    ``subprocess.Popen`` module as well as a wrapper class for
-    ``subprocess.Popen``
+    subprocess.Popen module as well as a wrapper class for subprocess.Popen
     that makes it so that an executed process can take the place of a file by
     duplicating all of the methods and attributes that file objects have.  
 
-    There are two base functions that have been added to the
-    ``subprocess.Popen``
-    class: ``Popen.send`` and ``Popen._recv``, each with two separate implementations,
+    There are two base functions that have been added to the subprocess.Popen
+    class: Popen.send and Popen._recv, each with two separate implementations,
     one for Windows and one for Unix based systems.  The Windows
-    implementation uses ``ctypes`` to access the functions needed to control pipes
+    implementation uses ctypes to access the functions needed to control pipes
     in the kernel 32 DLL in an asynchronous manner.  On Unix based systems,
     the Python interface for file control serves the same purpose.  The
-    different implementations of ``Popen.send`` and ``Popen._recv`` have identical
+    different implementations of Popen.send and Popen._recv have identical
     arguments to make code that uses these functions work across multiple
     platforms.  
 
-    When calling the ``Popen._recv`` function, it requires the pipe name be
-    passed as an argument so there exists the ``Popen.recv`` function that passes
-    selects ``stdout`` as the pipe for ``Popen._recv`` by default.
-    ``Popen.recv_err``
-    selects ``stderr`` as the pipe by default. ``Popen.recv`` and
-    ``Popen.recv_err``
-    are much easier to read and understand than
-    ``Popen._recv('stdout' ...)`` and
-    ``Popen._recv('stderr' ...)`` respectively.  
-
-    Since the ``Popen._recv`` function does not wait on data to be produced
-    before returning a value, it may return empty bytes.
-    ``Popen.asyncread``
+    When calling the Popen._recv function, it requires the pipe name be
+    passed as an argument so there exists the Popen.recv function that passes
+    selects stdout as the pipe for Popen._recv by default. Popen.recv_err
+    selects stderr as the pipe by default. Popen.recv and Popen.recv_err
+    are much easier to read and understand than Popen._recv('stdout' ...) and
+    Popen._recv('stderr' ...) respectively.  
+
+    Since the Popen._recv function does not wait on data to be produced
+    before returning a value, it may return empty bytes. Popen.asyncread
     handles this issue by returning all data read over a given time
     interval.  
 
-    The ``ProcessIOWrapper`` class uses the ``asyncread`` and
-    ``asyncwrite`` functions to
+    The ProcessIOWrapper class uses the asyncread and asyncwrite functions to
     allow a process to act like a file so that there are no blocking issues
-    that can arise from using the ``stdout`` and ``stdin`` file objects produced from
-    a ``subprocess.Popen`` call.
+    that can arise from using the stdout and stdin file objects produced from
+    a subprocess.Popen call.
     
 
 References:


More information about the Python-checkins mailing list