Skip to content

Commit f84d6d4

Browse files
authored
Remove outdated comments in FAQ
They have been commented out since 2009: 9e4ff75
1 parent 4757b7b commit f84d6d4

File tree

1 file changed

+0
-80
lines changed

1 file changed

+0
-80
lines changed

Doc/faq/library.rst

-80
Original file line numberDiff line numberDiff line change
@@ -534,86 +534,6 @@ file object, the same type returned by the built-in :func:`open` function.
534534
Thus, to read *n* bytes from a pipe *p* created with :func:`os.popen`, you need to
535535
use ``p.read(n)``.
536536
537-
538-
.. XXX update to use subprocess. See the :ref:`subprocess-replacements` section.
539-
540-
How do I run a subprocess with pipes connected to both input and output?
541-
------------------------------------------------------------------------
542-
543-
Use the :mod:`popen2` module. For example::
544-
545-
import popen2
546-
fromchild, tochild = popen2.popen2("command")
547-
tochild.write("input\n")
548-
tochild.flush()
549-
output = fromchild.readline()
550-
551-
Warning: in general it is unwise to do this because you can easily cause a
552-
deadlock where your process is blocked waiting for output from the child
553-
while the child is blocked waiting for input from you. This can be caused
554-
by the parent expecting the child to output more text than it does or
555-
by data being stuck in stdio buffers due to lack of flushing.
556-
The Python parent can of course explicitly flush the data it sends to the
557-
child before it reads any output, but if the child is a naive C program it
558-
may have been written to never explicitly flush its output, even if it is
559-
interactive, since flushing is normally automatic.
560-
561-
Note that a deadlock is also possible if you use :func:`popen3` to read
562-
stdout and stderr. If one of the two is too large for the internal buffer
563-
(increasing the buffer size does not help) and you ``read()`` the other one
564-
first, there is a deadlock, too.
565-
566-
Note on a bug in popen2: unless your program calls ``wait()`` or
567-
``waitpid()``, finished child processes are never removed, and eventually
568-
calls to popen2 will fail because of a limit on the number of child
569-
processes. Calling :func:`os.waitpid` with the :const:`os.WNOHANG` option can
570-
prevent this; a good place to insert such a call would be before calling
571-
``popen2`` again.
572-
573-
In many cases, all you really need is to run some data through a command and
574-
get the result back. Unless the amount of data is very large, the easiest
575-
way to do this is to write it to a temporary file and run the command with
576-
that temporary file as input. The standard module :mod:`tempfile` exports a
577-
:func:`~tempfile.mktemp` function to generate unique temporary file names. ::
578-
579-
import tempfile
580-
import os
581-
582-
class Popen3:
583-
"""
584-
This is a deadlock-safe version of popen that returns
585-
an object with errorlevel, out (a string) and err (a string).
586-
(capturestderr may not work under windows.)
587-
Example: print(Popen3('grep spam','\n\nhere spam\n\n').out)
588-
"""
589-
def __init__(self,command,input=None,capturestderr=None):
590-
outfile=tempfile.mktemp()
591-
command="( %s ) > %s" % (command,outfile)
592-
if input:
593-
infile=tempfile.mktemp()
594-
open(infile,"w").write(input)
595-
command=command+" <"+infile
596-
if capturestderr:
597-
errfile=tempfile.mktemp()
598-
command=command+" 2>"+errfile
599-
self.errorlevel=os.system(command) >> 8
600-
self.out=open(outfile,"r").read()
601-
os.remove(outfile)
602-
if input:
603-
os.remove(infile)
604-
if capturestderr:
605-
self.err=open(errfile,"r").read()
606-
os.remove(errfile)
607-
608-
Note that many interactive programs (e.g. vi) don't work well with pipes
609-
substituted for standard input and output. You will have to use pseudo ttys
610-
("ptys") instead of pipes. Or you can use a Python interface to Don Libes'
611-
"expect" library. A Python extension that interfaces to expect is called
612-
"expy" and available from https://expectpy.sourceforge.net. A pure Python
613-
solution that works like expect is `pexpect
614-
<https://pypi.org/project/pexpect/>`_.
615-
616-
617537
How do I access the serial (RS232) port?
618538
----------------------------------------
619539

0 commit comments

Comments
 (0)