--- a/build/temp/pep.txt
+++ b/build/temp/pep.txt
@@ -1,2328 +1,557 @@
-
-
-
-
-
-<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"
-"http://www.w3.org/TR/REC-html40/loose.dtd">
-<!-- ViewCVS - http://viewcvs.sourceforge.net/
-by Greg Stein - mailto:gstein@lyra.org -->
-<html>
-<head>
-<title>CVS Repository @ Lysator ACS - log - python-popen5: popen5/pep.txt</title>
-<meta name="generator" content="ViewCVS 1.0-dev">
-<link rel="stylesheet" href="/doc/viewcvs/styles.css" type="text/css">
-</head>
-<body>
-<div class="vc_navheader">
-<table width="100%" border="0" cellpadding="0" cellspacing="0">
-<tr>
-<td align="left"><a href="/viewcvs/viewcvs.cgi/?root=python-popen5#dirlist">[python-popen5]</a> / <a href="/viewcvs/viewcvs.cgi/popen5/?root=python-popen5#dirlist">popen5</a> / pep.txt</td>
-<td align="right">
-
-<form method=get action="/viewcvs/viewcvs.cgi/">
-
-<b>Project Root:</b>
-<select name="root" onchange="submit()">
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<optgroup label="CVS Repositories"><option>accesslog</option><option>adduser</option><option>aido</option><option>airstrike</option><option>anders</option><option>aphoto</option><option>aquamarijn</option><option>BaraKOM</option><option>blasweb</option><option>bokk</option><option>bunker</option><option>bygg</option><option>c1a-google</option><option>chimera</option><option>cyclades-serial-client</option><option>cydpkgadmin</option><option>doris</option><option>DummyProject</option><option>ekalk</option><option>fufreg</option><option>giles</option><option>gpg-pathfinder</option><option>gpgutils</option><option>groundmotion</option><option>gtp</option><option>hiveconf</option><option>isoonline</option><option>kmm-thomas</option><option>kom++</option><option>Kom.pm</option><option>KomSharp</option><option>llost</option><option>lsh</option><option>lubic</option><option>LysAdm</option><option>lyscvs</option><option>LysInv</option><option>lyskom-elisp-client</option><option>lysldap</option><option>lyspython</option><option>mailconf</option><option>mailman-discard</option><option>manikin</option><option>mattricks</option><option>mdh-cd5040-msn02003</option><option>mdi</option><option>medreg</option><option>mojawi</option><option>momr</option><option>mpi</option><option>mta-hashcash</option><option>nemu</option><option>netlogon</option><option>netscape-remote</option><option>nsclient</option><option>nsokoban</option><option>Odd</option><option>oru-community</option><option>oru-obp012-kylsim</option><option>pcl-expect</option><option>perlkom</option><option>photofokus</option><option>PICNIC</option><option>pk</option><option>pkgadmin</option><option>playd</option><option>pum6_test</option><option>pumatta</option><option>pynfs</option><option>pyobfuscate</option><option>python-lyskom</option><option>python-nettle</option><option selected>python-popen5</option><option>python-webmin</option><option>rdesktop</option><option>resourcebooking</option><option>rpm2sysvpkg</option><option>sercd</option><option>sesam1</option><option>snake-farm</option><option>snrgl</option><option>spexdb</option><option>svartvattnet</option><option>swift</option><option>tddc03</option><option>team</option><option>televinken</option><option>tightrealvnc</option><option>tokid</option><option>TSBK</option><option>unfs3</option><option>unilang3</option><option>webkom</option><option>xenofarm</option><option>xmlrpc-c</option><option>xtelevisa</option><option>YASC</option><option>yprolog</option><option>zerofps-data</option></optgroup>
-
-
-<optgroup label="Subversion Repositories"><option>svn</option></optgroup>
-
-</select>
-<input type=submit value="Go">
-</form>
-
-</td>
-</tr>
-</table>
-</div>
-<h1>python-popen5: popen5/pep.txt</h1>
-
-<hr noshade>
-
-Default branch: MAIN
-<br>
-Bookmark a link to HEAD:
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&view=markup">view</a>)
-(<a href="/viewcvs/viewcvs.cgi/*checkout*/popen5/pep.txt?root=python-popen5">download</a>)
-
-
-<br>
-
-
-
- 
-
-
-
-<hr size=1 noshade>
-
-
-<a name="rev1.24"></a>
-<a name="HEAD"></a>
-
-
-Revision <b>1.24</b>
- -
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.24&root=python-popen5&view=markup">view</a>)
-(<a href="/viewcvs/viewcvs.cgi/*checkout*/popen5/pep.txt?rev=1.24&root=python-popen5">download</a>)
-
-
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?annotate=1.24&root=python-popen5">annotate</a>)
-
-
-- <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.24&root=python-popen5&r1=1.24&view=log">[select for diffs]</a>
-
-
-
-
-<br>
-
-<i>Sat Nov 27 07:44:51 2004 UTC</i> (3 years, 6 months ago) by <i>astrand</i>
-
-<br>Branch:
-
-<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&only_with_tag=MAIN"><b>MAIN</b></a>
-
-
-
-<br>CVS Tags:
-
-<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&only_with_tag=HEAD"><b>HEAD</b></a>
-
-
-
-
-
-
-<br>Changes since <b>1.23: +1 -1 lines</b>
-
-
-
-
-
-
-
-<br>Diff to <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&r1=1.23&r2=1.24">previous 1.23</a>
-
-
-
-
-
-
-
-
-
-
-<pre class="vc_log">Sync with Python CVS
-</pre>
-
-<hr size=1 noshade>
-
-
-<a name="rev1.23"></a>
-
-
-Revision <b>1.23</b>
- -
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.23&root=python-popen5&view=markup">view</a>)
-(<a href="/viewcvs/viewcvs.cgi/*checkout*/popen5/pep.txt?rev=1.23&root=python-popen5">download</a>)
-
-
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?annotate=1.23&root=python-popen5">annotate</a>)
-
-
-- <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.24&root=python-popen5&r1=1.23&view=log">[select for diffs]</a>
-
-
-
-
-<br>
-
-<i>Wed Oct 13 07:36:33 2004 UTC</i> (3 years, 7 months ago) by <i>astrand</i>
-
-<br>Branch:
-
-<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&only_with_tag=MAIN"><b>MAIN</b></a>
-
-
-
-
-
-
-
-<br>Changes since <b>1.22: +5 -5 lines</b>
-
-
-
-
-
-
-
-<br>Diff to <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&r1=1.22&r2=1.23">previous 1.22</a>
-
-
-
-
-
-
-
-
-
-
-<pre class="vc_log">Synchronized with Python CVS.
-</pre>
-
-<hr size=1 noshade>
-
-
-<a name="rev1.22"></a>
-
-
-Revision <b>1.22</b>
- -
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.22&root=python-popen5&view=markup">view</a>)
-(<a href="/viewcvs/viewcvs.cgi/*checkout*/popen5/pep.txt?rev=1.22&root=python-popen5">download</a>)
-
-
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?annotate=1.22&root=python-popen5">annotate</a>)
-
-
-- <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.24&root=python-popen5&r1=1.22&view=log">[select for diffs]</a>
-
-
-
-
-<br>
-
-<i>Tue Oct 12 06:46:52 2004 UTC</i> (3 years, 7 months ago) by <i>astrand</i>
-
-<br>Branch:
-
-<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&only_with_tag=MAIN"><b>MAIN</b></a>
-
-
-
-
-
-
-
-<br>Changes since <b>1.21: +14 -41 lines</b>
-
-
-
-
-
-
-
-<br>Diff to <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&r1=1.21&r2=1.22">previous 1.21</a>
-
-
-
-
-
-
-
-
-
-
-<pre class="vc_log">Updated PEP to reflect that callv() is no longer.
-</pre>
-
-<hr size=1 noshade>
-
-
-<a name="rev1.21"></a>
-
-
-Revision <b>1.21</b>
- -
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.21&root=python-popen5&view=markup">view</a>)
-(<a href="/viewcvs/viewcvs.cgi/*checkout*/popen5/pep.txt?rev=1.21&root=python-popen5">download</a>)
-
-
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?annotate=1.21&root=python-popen5">annotate</a>)
-
-
-- <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.24&root=python-popen5&r1=1.21&view=log">[select for diffs]</a>
-
-
-
-
-<br>
-
-<i>Mon Oct 11 20:48:20 2004 UTC</i> (3 years, 7 months ago) by <i>astrand</i>
-
-<br>Branch:
-
-<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&only_with_tag=MAIN"><b>MAIN</b></a>
-
-
-
-
-
-
-
-<br>Changes since <b>1.20: +18 -17 lines</b>
-
-
-
-
-
-
-
-<br>Diff to <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&r1=1.20&r2=1.21">previous 1.20</a>
-
-
-
-
-
-
-
-
-
-
-<pre class="vc_log">Updated documentation for the args argument.
-</pre>
-
-<hr size=1 noshade>
-
-
-<a name="rev1.20"></a>
-
-
-Revision <b>1.20</b>
- -
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.20&root=python-popen5&view=markup">view</a>)
-(<a href="/viewcvs/viewcvs.cgi/*checkout*/popen5/pep.txt?rev=1.20&root=python-popen5">download</a>)
-
-
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?annotate=1.20&root=python-popen5">annotate</a>)
-
-
-- <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.24&root=python-popen5&r1=1.20&view=log">[select for diffs]</a>
-
-
-
-
-<br>
-
-<i>Mon Oct 11 08:33:18 2004 UTC</i> (3 years, 7 months ago) by <i>astrand</i>
-
-<br>Branch:
-
-<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&only_with_tag=MAIN"><b>MAIN</b></a>
-
-
-
-
-
-
-
-<br>Changes since <b>1.19: +157 -141 lines</b>
-
-
-
-
-
-
-
-<br>Diff to <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&r1=1.19&r2=1.20">previous 1.19</a>
-
-
-
-
-
-
-
-
-
-
-<pre class="vc_log">Synchronized with Python CVS:
-Some layout and spelling fixes.
-</pre>
-
-<hr size=1 noshade>
-
-
-<a name="rev1.19"></a>
-
-
-Revision <b>1.19</b>
- -
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.19&root=python-popen5&view=markup">view</a>)
-(<a href="/viewcvs/viewcvs.cgi/*checkout*/popen5/pep.txt?rev=1.19&root=python-popen5">download</a>)
-
-
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?annotate=1.19&root=python-popen5">annotate</a>)
-
-
-- <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.24&root=python-popen5&r1=1.19&view=log">[select for diffs]</a>
-
-
-
-
-<br>
-
-<i>Fri Oct  8 09:16:19 2004 UTC</i> (3 years, 7 months ago) by <i>astrand</i>
-
-<br>Branch:
-
-<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&only_with_tag=MAIN"><b>MAIN</b></a>
-
-
-
-
-
-
-
-<br>Changes since <b>1.18: +19 -1 lines</b>
-
-
-
-
-
-
-
-<br>Diff to <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&r1=1.18&r2=1.19">previous 1.18</a>
-
-
-
-
-
-
-
-
-
-
-<pre class="vc_log">Added things-to-do to the Open Issues section.
-</pre>
-
-<hr size=1 noshade>
-
-
-<a name="rev1.18"></a>
-
-
-Revision <b>1.18</b>
- -
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.18&root=python-popen5&view=markup">view</a>)
-(<a href="/viewcvs/viewcvs.cgi/*checkout*/popen5/pep.txt?rev=1.18&root=python-popen5">download</a>)
-
-
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?annotate=1.18&root=python-popen5">annotate</a>)
-
-
-- <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.24&root=python-popen5&r1=1.18&view=log">[select for diffs]</a>
-
-
-
-
-<br>
-
-<i>Fri Oct  8 09:07:07 2004 UTC</i> (3 years, 7 months ago) by <i>astrand</i>
-
-<br>Branch:
-
-<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&only_with_tag=MAIN"><b>MAIN</b></a>
-
-
-
-
-
-
-
-<br>Changes since <b>1.17: +9 -0 lines</b>
-
-
-
-
-
-
-
-<br>Diff to <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&r1=1.17&r2=1.18">previous 1.17</a>
-
-
-
-
-
-
-
-
-
-
-<pre class="vc_log">New example: shell pipeline.
-</pre>
-
-<hr size=1 noshade>
-
-
-<a name="rev1.17"></a>
-
-
-Revision <b>1.17</b>
- -
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.17&root=python-popen5&view=markup">view</a>)
-(<a href="/viewcvs/viewcvs.cgi/*checkout*/popen5/pep.txt?rev=1.17&root=python-popen5">download</a>)
-
-
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?annotate=1.17&root=python-popen5">annotate</a>)
-
-
-- <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.24&root=python-popen5&r1=1.17&view=log">[select for diffs]</a>
-
-
-
-
-<br>
-
-<i>Fri Oct  8 08:57:39 2004 UTC</i> (3 years, 7 months ago) by <i>astrand</i>
-
-<br>Branch:
-
-<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&only_with_tag=MAIN"><b>MAIN</b></a>
-
-
-
-
-
-
-
-<br>Changes since <b>1.16: +9 -0 lines</b>
-
-
-
-
-
-
-
-<br>Diff to <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&r1=1.16&r2=1.17">previous 1.16</a>
-
-
-
-
-
-
-
-
-
-
-<pre class="vc_log">Added note about the _subprocess module.
-</pre>
-
-<hr size=1 noshade>
-
-
-<a name="rev1.16"></a>
-
-
-Revision <b>1.16</b>
- -
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.16&root=python-popen5&view=markup">view</a>)
-(<a href="/viewcvs/viewcvs.cgi/*checkout*/popen5/pep.txt?rev=1.16&root=python-popen5">download</a>)
-
-
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?annotate=1.16&root=python-popen5">annotate</a>)
-
-
-- <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.24&root=python-popen5&r1=1.16&view=log">[select for diffs]</a>
-
-
-
-
-<br>
-
-<i>Fri Oct  8 08:52:09 2004 UTC</i> (3 years, 7 months ago) by <i>astrand</i>
-
-<br>Branch:
-
-<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&only_with_tag=MAIN"><b>MAIN</b></a>
-
-
-
-
-
-
-
-<br>Changes since <b>1.15: +141 -0 lines</b>
-
-
-
-
-
-
-
-<br>Diff to <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&r1=1.15&r2=1.16">previous 1.15</a>
-
-
-
-
-
-
-
-
-
-
-<pre class="vc_log">New section: Included documentation from module about now to replace
-older functions with subprocess.
-</pre>
-
-<hr size=1 noshade>
-
-
-<a name="rev1.15"></a>
-
-
-Revision <b>1.15</b>
- -
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.15&root=python-popen5&view=markup">view</a>)
-(<a href="/viewcvs/viewcvs.cgi/*checkout*/popen5/pep.txt?rev=1.15&root=python-popen5">download</a>)
-
-
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?annotate=1.15&root=python-popen5">annotate</a>)
-
-
-- <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.24&root=python-popen5&r1=1.15&view=log">[select for diffs]</a>
-
-
-
-
-<br>
-
-<i>Fri Oct  8 08:44:10 2004 UTC</i> (3 years, 7 months ago) by <i>astrand</i>
-
-<br>Branch:
-
-<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&only_with_tag=MAIN"><b>MAIN</b></a>
-
-
-
-
-
-
-
-<br>Changes since <b>1.14: +20 -0 lines</b>
-
-
-
-
-
-
-
-<br>Diff to <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&r1=1.14&r2=1.15">previous 1.14</a>
-
-
-
-
-
-
-
-
-
-
-<pre class="vc_log">Added Backwards Compatibility section.
-</pre>
-
-<hr size=1 noshade>
-
-
-<a name="rev1.14"></a>
-
-
-Revision <b>1.14</b>
- -
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.14&root=python-popen5&view=markup">view</a>)
-(<a href="/viewcvs/viewcvs.cgi/*checkout*/popen5/pep.txt?rev=1.14&root=python-popen5">download</a>)
-
-
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?annotate=1.14&root=python-popen5">annotate</a>)
-
-
-- <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.24&root=python-popen5&r1=1.14&view=log">[select for diffs]</a>
-
-
-
-
-<br>
-
-<i>Fri Oct  8 08:18:35 2004 UTC</i> (3 years, 7 months ago) by <i>astrand</i>
-
-<br>Branch:
-
-<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&only_with_tag=MAIN"><b>MAIN</b></a>
-
-
-
-
-
-
-
-<br>Changes since <b>1.13: +1 -4 lines</b>
-
-
-
-
-
-
-
-<br>Diff to <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&r1=1.13&r2=1.14">previous 1.13</a>
-
-
-
-
-
-
-
-
-
-
-<pre class="vc_log">Removed the open issue of Windows extension module.
-</pre>
-
-<hr size=1 noshade>
-
-
-<a name="rev1.13"></a>
-
-
-Revision <b>1.13</b>
- -
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.13&root=python-popen5&view=markup">view</a>)
-(<a href="/viewcvs/viewcvs.cgi/*checkout*/popen5/pep.txt?rev=1.13&root=python-popen5">download</a>)
-
-
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?annotate=1.13&root=python-popen5">annotate</a>)
-
-
-- <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.24&root=python-popen5&r1=1.13&view=log">[select for diffs]</a>
-
-
-
-
-<br>
-
-<i>Thu Sep 23 14:45:08 2004 UTC</i> (3 years, 8 months ago) by <i>astrand</i>
-
-<br>Branch:
-
-<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&only_with_tag=MAIN"><b>MAIN</b></a>
-
-
-
-
-
-
-
-<br>Changes since <b>1.12: +5 -1 lines</b>
-
-
-
-
-
-
-
-<br>Diff to <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&r1=1.12&r2=1.13">previous 1.12</a>
-
-
-
-
-
-
-
-
-
-
-<pre class="vc_log">Added documentation for the case with shell=1, UNIX and args is a sequence.
-</pre>
-
-<hr size=1 noshade>
-
-
-<a name="rev1.12"></a>
-
-
-Revision <b>1.12</b>
- -
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.12&root=python-popen5&view=markup">view</a>)
-(<a href="/viewcvs/viewcvs.cgi/*checkout*/popen5/pep.txt?rev=1.12&root=python-popen5">download</a>)
-
-
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?annotate=1.12&root=python-popen5">annotate</a>)
-
-
-- <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.24&root=python-popen5&r1=1.12&view=log">[select for diffs]</a>
-
-
-
-
-<br>
-
-<i>Tue Sep 21 03:33:26 2004 UTC</i> (3 years, 8 months ago) by <i>astrand</i>
-
-<br>Branch:
-
-<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&only_with_tag=MAIN"><b>MAIN</b></a>
-
-
-
-
-
-
-
-<br>Changes since <b>1.11: +4 -4 lines</b>
-
-
-
-
-
-
-
-<br>Diff to <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&r1=1.11&r2=1.12">previous 1.11</a>
-
-
-
-
-
-
-
-
-
-
-<pre class="vc_log">Removed the POSIX wording, since we actually supports Windows as well
-nowadays.
-</pre>
-
-<hr size=1 noshade>
-
-
-<a name="rev1.11"></a>
-
-
-Revision <b>1.11</b>
- -
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.11&root=python-popen5&view=markup">view</a>)
-(<a href="/viewcvs/viewcvs.cgi/*checkout*/popen5/pep.txt?rev=1.11&root=python-popen5">download</a>)
-
-
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?annotate=1.11&root=python-popen5">annotate</a>)
-
-
-- <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.24&root=python-popen5&r1=1.11&view=log">[select for diffs]</a>
-
-
-
-
-<br>
-
-<i>Tue Sep 21 03:31:26 2004 UTC</i> (3 years, 8 months ago) by <i>astrand</i>
-
-<br>Branch:
-
-<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&only_with_tag=MAIN"><b>MAIN</b></a>
-
-
-
-
-
-
-
-<br>Changes since <b>1.10: +13 -13 lines</b>
-
-
-
-
-
-
-
-<br>Diff to <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&r1=1.10&r2=1.11">previous 1.10</a>
-
-
-
-
-
-
-
-
-
-
-<pre class="vc_log">Updated pep to reflect name change to subprocess.
-</pre>
-
-<hr size=1 noshade>
-
-
-<a name="rev1.10"></a>
-
-
-Revision <b>1.10</b>
- -
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.10&root=python-popen5&view=markup">view</a>)
-(<a href="/viewcvs/viewcvs.cgi/*checkout*/popen5/pep.txt?rev=1.10&root=python-popen5">download</a>)
-
-
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?annotate=1.10&root=python-popen5">annotate</a>)
-
-
-- <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.24&root=python-popen5&r1=1.10&view=log">[select for diffs]</a>
-
-
-
-
-<br>
-
-<i>Tue Sep 21 03:29:25 2004 UTC</i> (3 years, 8 months ago) by <i>astrand</i>
-
-<br>Branch:
-
-<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&only_with_tag=MAIN"><b>MAIN</b></a>
-
-
-
-
-
-
-
-<br>Changes since <b>1.9: +6 -3 lines</b>
-
-
-
-
-
-
-
-<br>Diff to <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&r1=1.9&r2=1.10">previous 1.9</a>
-
-
-
-
-
-
-
-
-
-
-<pre class="vc_log">Documented the shell keyword.
-</pre>
-
-<hr size=1 noshade>
-
-
-<a name="rev1.9"></a>
-
-
-Revision <b>1.9</b>
- -
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.9&root=python-popen5&view=markup">view</a>)
-(<a href="/viewcvs/viewcvs.cgi/*checkout*/popen5/pep.txt?rev=1.9&root=python-popen5">download</a>)
-
-
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?annotate=1.9&root=python-popen5">annotate</a>)
-
-
-- <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.24&root=python-popen5&r1=1.9&view=log">[select for diffs]</a>
-
-
-
-
-<br>
-
-<i>Sat Jul 31 21:53:43 2004 UTC</i> (3 years, 10 months ago) by <i>astrand</i>
-
-<br>Branch:
-
-<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&only_with_tag=MAIN"><b>MAIN</b></a>
-
-
-
-
-
-
-
-<br>Changes since <b>1.8: +101 -84 lines</b>
-
-
-
-
-
-
-
-<br>Diff to <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&r1=1.8&r2=1.9">previous 1.8</a>
-
-
-
-
-
-
-
-
-
-
-<pre class="vc_log">Updated Specification section to match development:
-
-* argv0 -&gt; executable
-* Windows argument handling
-* .fromchild -&gt; .stdout etc
-* documents call/callv
-* documents startupinfo/creationflags
-* Raises ValueError rather than PopenException on invalid args.
-* poll/wait returns returncode; not statuscode.
-</pre>
-
-<hr size=1 noshade>
-
-
-<a name="rev1.8"></a>
-
-
-Revision <b>1.8</b>
- -
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.8&root=python-popen5&view=markup">view</a>)
-(<a href="/viewcvs/viewcvs.cgi/*checkout*/popen5/pep.txt?rev=1.8&root=python-popen5">download</a>)
-
-
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?annotate=1.8&root=python-popen5">annotate</a>)
-
-
-- <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.24&root=python-popen5&r1=1.8&view=log">[select for diffs]</a>
-
-
-
-
-<br>
-
-<i>Sat Jul 31 21:29:02 2004 UTC</i> (3 years, 10 months ago) by <i>astrand</i>
-
-<br>Branch:
-
-<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&only_with_tag=MAIN"><b>MAIN</b></a>
-
-
-
-
-
-
-
-<br>Changes since <b>1.7: +6 -7 lines</b>
-
-
-
-
-
-
-
-<br>Diff to <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&r1=1.7&r2=1.8">previous 1.7</a>
-
-
-
-
-
-
-
-
-
-
-<pre class="vc_log">Updated information about Windows support to reflect reality.
-</pre>
-
-<hr size=1 noshade>
-
-
-<a name="rev1.7"></a>
-
-
-Revision <b>1.7</b>
- -
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.7&root=python-popen5&view=markup">view</a>)
-(<a href="/viewcvs/viewcvs.cgi/*checkout*/popen5/pep.txt?rev=1.7&root=python-popen5">download</a>)
-
-
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?annotate=1.7&root=python-popen5">annotate</a>)
-
-
-- <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.24&root=python-popen5&r1=1.7&view=log">[select for diffs]</a>
-
-
-
-
-<br>
-
-<i>Sat Jul 31 21:24:31 2004 UTC</i> (3 years, 10 months ago) by <i>astrand</i>
-
-<br>Branch:
-
-<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&only_with_tag=MAIN"><b>MAIN</b></a>
-
-
-
-
-
-
-
-<br>Changes since <b>1.6: +3 -3 lines</b>
-
-
-
-
-
-
-
-<br>Diff to <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&r1=1.6&r2=1.7">previous 1.6</a>
-
-
-
-
-
-
-
-
-
-
-<pre class="vc_log">Minor grammar fix
-</pre>
-
-<hr size=1 noshade>
-
-
-<a name="rev1.6"></a>
-
-
-Revision <b>1.6</b>
- -
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.6&root=python-popen5&view=markup">view</a>)
-(<a href="/viewcvs/viewcvs.cgi/*checkout*/popen5/pep.txt?rev=1.6&root=python-popen5">download</a>)
-
-
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?annotate=1.6&root=python-popen5">annotate</a>)
-
-
-- <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.24&root=python-popen5&r1=1.6&view=log">[select for diffs]</a>
-
-
-
-
-<br>
-
-<i>Sat Jul 31 21:23:48 2004 UTC</i> (3 years, 10 months ago) by <i>astrand</i>
-
-<br>Branch:
-
-<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&only_with_tag=MAIN"><b>MAIN</b></a>
-
-
-
-
-
-
-
-<br>Changes since <b>1.5: +66 -13 lines</b>
-
-
-
-
-
-
-
-<br>Diff to <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&r1=1.5&r2=1.6">previous 1.5</a>
-
-
-
-
-
-
-
-
-
-
-<pre class="vc_log">Documents call() and callv(), instead of the old run() API.
-</pre>
-
-<hr size=1 noshade>
-
-
-<a name="rev1.5"></a>
-
-
-Revision <b>1.5</b>
- -
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.5&root=python-popen5&view=markup">view</a>)
-(<a href="/viewcvs/viewcvs.cgi/*checkout*/popen5/pep.txt?rev=1.5&root=python-popen5">download</a>)
-
-
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?annotate=1.5&root=python-popen5">annotate</a>)
-
-
-- <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.24&root=python-popen5&r1=1.5&view=log">[select for diffs]</a>
-
-
-
-
-<br>
-
-<i>Sat Jul 31 20:37:51 2004 UTC</i> (3 years, 10 months ago) by <i>astrand</i>
-
-<br>Branch:
-
-<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&only_with_tag=MAIN"><b>MAIN</b></a>
-
-
-
-
-
-
-
-<br>Changes since <b>1.4: +18 -19 lines</b>
-
-
-
-
-
-
-
-<br>Diff to <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&r1=1.4&r2=1.5">previous 1.4</a>
-
-
-
-
-
-
-
-
-
-
-<pre class="vc_log">The module is now called process.
-</pre>
-
-<hr size=1 noshade>
-
-
-<a name="rev1.4"></a>
-
-
-Revision <b>1.4</b>
- -
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.4&root=python-popen5&view=markup">view</a>)
-(<a href="/viewcvs/viewcvs.cgi/*checkout*/popen5/pep.txt?rev=1.4&root=python-popen5">download</a>)
-
-
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?annotate=1.4&root=python-popen5">annotate</a>)
-
-
-- <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.24&root=python-popen5&r1=1.4&view=log">[select for diffs]</a>
-
-
-
-
-<br>
-
-<i>Sat Jan  3 10:32:53 2004 UTC</i> (4 years, 5 months ago) by <i>astrand</i>
-
-<br>Branch:
-
-<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&only_with_tag=MAIN"><b>MAIN</b></a>
-
-
-
-
-
-
-
-<br>Changes since <b>1.3: +161 -157 lines</b>
-
-
-
-
-
-
-
-<br>Diff to <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&r1=1.3&r2=1.4">previous 1.3</a>
-
-
-
-
-
-
-
-
-
-
-<pre class="vc_log">Syncronized with Python CVS
-</pre>
-
-<hr size=1 noshade>
-
-
-<a name="rev1.3"></a>
-
-
-Revision <b>1.3</b>
- -
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.3&root=python-popen5&view=markup">view</a>)
-(<a href="/viewcvs/viewcvs.cgi/*checkout*/popen5/pep.txt?rev=1.3&root=python-popen5">download</a>)
-
-
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?annotate=1.3&root=python-popen5">annotate</a>)
-
-
-- <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.24&root=python-popen5&r1=1.3&view=log">[select for diffs]</a>
-
-
-
-
-<br>
-
-<i>Wed Nov 19 20:40:05 2003 UTC</i> (4 years, 6 months ago) by <i>astrand</i>
-
-<br>Branch:
-
-<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&only_with_tag=MAIN"><b>MAIN</b></a>
-
-
-
-
-
-
-
-<br>Changes since <b>1.2: +1 -1 lines</b>
-
-
-
-
-
-
-
-<br>Diff to <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&r1=1.2&r2=1.3">previous 1.2</a>
-
-
-
-
-
-
-
-
-
-
-<pre class="vc_log">Speling fix.
-</pre>
-
-<hr size=1 noshade>
-
-
-<a name="rev1.2"></a>
-
-
-Revision <b>1.2</b>
- -
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.2&root=python-popen5&view=markup">view</a>)
-(<a href="/viewcvs/viewcvs.cgi/*checkout*/popen5/pep.txt?rev=1.2&root=python-popen5">download</a>)
-
-
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?annotate=1.2&root=python-popen5">annotate</a>)
-
-
-- <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.24&root=python-popen5&r1=1.2&view=log">[select for diffs]</a>
-
-
-
-
-<br>
-
-<i>Wed Nov 19 20:38:04 2003 UTC</i> (4 years, 6 months ago) by <i>astrand</i>
-
-<br>Branch:
-
-<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&only_with_tag=MAIN"><b>MAIN</b></a>
-
-
-
-
-
-
-
-<br>Changes since <b>1.1: +1 -0 lines</b>
-
-
-
-
-
-
-
-<br>Diff to <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&r1=1.1&r2=1.2">previous 1.1</a>
-
-
-
-
-
-
-
-
-
-
-<pre class="vc_log">Added creation date.
-</pre>
-
-<hr size=1 noshade>
-
-
-<a name="rev1.1"></a>
-
-
-Revision <b>1.1</b>
- -
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.1&root=python-popen5&view=markup">view</a>)
-(<a href="/viewcvs/viewcvs.cgi/*checkout*/popen5/pep.txt?rev=1.1&root=python-popen5">download</a>)
-
-
-(<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?annotate=1.1&root=python-popen5">annotate</a>)
-
-
-- <a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?rev=1.24&root=python-popen5&r1=1.1&view=log">[select for diffs]</a>
-
-
-
-
-<br>
-
-<i>Wed Nov 19 20:30:57 2003 UTC</i> (4 years, 6 months ago) by <i>astrand</i>
-
-<br>Branch:
-
-<a href="/viewcvs/viewcvs.cgi/popen5/pep.txt?root=python-popen5&only_with_tag=MAIN"><b>MAIN</b></a>
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-<pre class="vc_log">Added pep.txt
-</pre>
-
- 
-
-
-
-<a name="diff"></a>
-<hr noshade>
-This form allows you to request diffs between any two revisions of
-a file. You may select a symbolic revision name using the selection
-box or you may type in a numeric name using the type-in text box.
-<p>
-<form method="get" action="/viewcvs/viewcvs.cgi/popen5/pep.txt" name="diff_select">
-<input type="hidden" name="root" value="python-popen5" />
-<table border="0" cellpadding="2" cellspacing="0">
-<tr>
-<td>&nbsp;</td>
-<td>
-Diffs between
-
-<select name="r1">
-<option value="text" selected>Use Text Field</option>
-
-<option value="1.24:MAIN">MAIN</option>
-
-<option value="1.24:HEAD">HEAD</option>
-
-</select>
-
-<input type="TEXT" size="12" name="tr1" value="1.1"
-onChange="document.diff_select.r1.selectedIndex=0">
-and
-
-<select name="r2">
-<option value="text" selected>Use Text Field</option>
-
-<option value="1.24:MAIN">MAIN</option>
-
-<option value="1.24:HEAD">HEAD</option>
-
-</select>
-
-<input type="TEXT" size="12" name="tr2" value="1.24"
-onChange="document.diff_select.r1.selectedIndex=0">
-</td>
-</tr>
-<tr>
-<td><input type="checkbox" name="makepatch" id="makepatch" value="1"></td>
-<td><label for="makepatch">Generate output suitable for use with a patch
-program</label></td>
-</tr>
-<tr>
-<td>&nbsp;</td>
-<td>
-Type of Diff should be a
-<select name="diff_format" onchange="submit()">
-<option value="h" selected>Colored Diff</option>
-<option value="l" >Long Colored Diff</option>
-<option value="u" >Unidiff</option>
-<option value="c" >Context Diff</option>
-<option value="s" >Side by Side</option>
-</select>
-<input type="submit" value=" Get Diffs "></form>
-</td>
-</tr>
-</table>
-
-
-
-<hr noshade>
-<a name=branch></a>
-<form method=GET action="/viewcvs/viewcvs.cgi/popen5/pep.txt">
-<input type="hidden" name="root" value="python-popen5" />
-View only Branch:
-<select name="only_with_tag" onchange="submit()">
-<option value="" selected>Show all branches</option>
-
-<option value="MAIN" >MAIN</option>
-
-</select>
-<input type=submit value=" View Branch ">
-</form>
-
-
-<hr noshade>
-<a name=logsort></a>
-<form method=get action="/viewcvs/viewcvs.cgi/popen5/pep.txt">
-<input type="hidden" name="root" value="python-popen5" />
-Sort log by:
-<select name="logsort" onchange="submit()">
-<option value="cvs" >Not sorted</option>
-<option value="date" selected>Commit date</option>
-<option value="rev" >Revision</option>
-</select>
-<input type=submit value=" Sort ">
-</form>
-
-
-<hr noshade>
-<table width="100%" border="0" cellpadding="0" cellspacing="0">
-<tr>
-<td align="left">
-<address><a href="mailto:lyscvs@lysator.liu.se">Lysator CVS Admin</a></address><br />
-Powered by <a href="http://viewcvs.sourceforge.net/">ViewCVS 1.0-dev</a>
-</td>
-<td align="right">
-<img src="/doc/viewcvs/images/logo.png" alt="(Powered by ViewCVS)" border="0"
-width="128" height="48" /><br />
-<h3><a target="_blank" href="/doc/viewcvs/help_log.html">ViewCVS and CVS Help</a></h3>
-</td>
-</tr>
-</table>
-</body>
-</html>
-
+PEP: 324
+Title: subprocess - New process module
+Version: $Revision: 1.24 $
+Last-Modified: $Date: 2004/11/27 07:44:51 $
+Author: Peter Astrand <astrand@lysator.liu.se>
+Status: Draft
+Type: Standards Track (library)
+Created: 19-Nov-2003
+Content-Type: text/plain
+Python-Version: 2.4
+
+
+Abstract
+
+    This PEP describes a new module for starting and communicating
+    with processes.
+
+
+Motivation
+
+    Starting new processes is a common task in any programming
+    language, and very common in a high-level language like Python.
+    Good support for this task is needed, because:
+
+    - Inappropriate functions for starting processes could mean a
+      security risk: If the program is started through the shell, and
+      the arguments contain shell meta characters, the result can be
+      disastrous. [1]
+
+    - It makes Python an even better replacement language for
+      over-complicated shell scripts.
+
+    Currently, Python has a large number of different functions for
+    process creation.  This makes it hard for developers to choose.
+
+    The subprocess module provides the following enhancements over
+    previous functions:
+
+    - One "unified" module provides all functionality from previous
+      functions.
+
+    - 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.
+
+    - A hook for executing custom code between fork and exec.  This
+      can be used for, for example, changing uid.
+
+    - No implicit call of /bin/sh.  This means that there is no need
+      for escaping dangerous shell meta characters.
+
+    - 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.
+
+    - With the subprocess module, it's possible to control if all open
+      file descriptors should be closed before the new program is
+      executed.
+
+    - Support for connecting several subprocesses (shell "pipe").
+
+    - Universal newline support.
+
+    - 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.
+      This means that many Python applications contain race
+      conditions.  A communicate() method in the standard library
+      solves this problem.
+
+
+Rationale
+
+    The following points summarizes the design:
+
+    - subprocess was based on popen2, which is tried-and-tested.
+
+    - The factory functions in popen2 have been removed, because I
+      consider the class constructor equally easy to work with.
+
+    - popen2 contains several factory functions and classes for
+      different combinations of redirection.  subprocess, however,
+      contains one single class.  Since the subprocess module supports
+      12 different combinations of redirection, providing a class or
+      function for each of them would be cumbersome and not very
+      intuitive.  Even with popen2, this is a readability problem.
+      For example, many people cannot tell the difference between
+      popen2.popen2 and popen2.popen4 without using the documentation.
+
+    - One small utility function is provided: subprocess.call(). It
+      aims to be an enhancement over os.system(), while still very
+      easy to use:
+
+        - It does not use the Standard C function system(), which has
+          limitations.
+
+        - It does not call the shell implicitly.
+
+        - No need for quoting; using an argument list.
+
+        - The return value is easier to work with.
+
+      The call() utility function accepts an 'args' argument, just
+      like the Popen class constructor.  It waits for the command to
+      complete, then returns the returncode attribute.  The
+      implementation is very simple:
+
+      def call(*args, **kwargs):
+          return Popen(*args, **kwargs).wait()
+
+      The motivation behind the call() function is simple: Starting a
+      process and wait for it to finish is a common task.
+
+      While Popen supports a wide range of options, many users have
+      simple needs.  Many people are using os.system() today, mainly
+      because it provides a simple interface.  Consider this example:
+
+          os.system("stty sane -F " + device)
+
+      With subprocess.call(), this would look like:
+
+          subprocess.call(["stty", "sane", "-F", device])
+
+      or, if executing through the shell:
+
+          subprocess.call("stty sane -F " + device, shell=True)
+
+    - The "preexec" functionality makes it possible to run arbitrary
+      code between fork and exec.  One might ask why there are special
+      arguments for setting the environment and current directory, but
+      not for, for example, setting the uid.  The answer is:
+
+        - Changing environment and working directory is considered
+          fairly common.
+
+        - Old functions like spawn() has support for an
+          "env"-argument.
+
+        - env and cwd are considered quite cross-platform: They make
+          sense even on Windows.
+
+     - On POSIX platforms, no extension module is required: the module
+       uses os.fork(), os.execvp() etc.
+
+     - On Windows platforms, the module requires either Mark Hammond's
+       Windows extensions[5], or a small extension module called
+       _subprocess.
+
+
+Specification
+
+    This module defines one class called Popen:
+
+        class Popen(args, bufsize=0, executable=None,
+                    stdin=None, stdout=None, stderr=None,
+                    preexec_fn=None, close_fds=False, shell=False,
+                    cwd=None, env=None, universal_newlines=False,
+                    startupinfo=None, creationflags=0):
+
+
+      Arguments are:
+
+    - args should be a string, or a sequence of program arguments.
+      The program to execute is normally the first item in the args
+      sequence or string, but can be explicitly set by using the
+      executable argument.
+      
+      On UNIX, with shell=False (default): In this case, the Popen
+      class uses os.execvp() to execute the child program.  args
+      should normally be a sequence.  A string will be treated as a
+      sequence with the string as the only item (the program to
+      execute).
+      
+      On UNIX, with shell=True: If args is a string, it specifies the
+      command string to execute through the shell.  If args is a
+      sequence, the first item specifies the command string, and any
+      additional items will be treated as additional shell arguments.
+      
+      On Windows: the Popen class uses CreateProcess() to execute the
+      child program, which operates on strings.  If args is a
+      sequence, it will be converted to a string using the
+      list2cmdline method.  Please note that not all MS Windows
+      applications interpret the command line the same way: The
+      list2cmdline is designed for applications using the same rules
+      as the MS C runtime.
+
+    - bufsize, if given, has the same meaning as the corresponding
+      argument to the built-in open() function: 0 means unbuffered, 1
+      means line buffered, any other positive value means use a buffer
+      of (approximately) that size.  A negative bufsize means to use
+      the system default, which usually means fully buffered.  The
+      default value for bufsize is 0 (unbuffered).
+
+    - stdin, stdout and stderr specify the executed programs' standard
+      input, standard output and standard error file handles,
+      respectively.  Valid values are PIPE, an existing file
+      descriptor (a positive integer), an existing file object, and
+      None.  PIPE indicates that a new pipe to the child should be
+      created.  With None, no redirection will occur; the child's file
+      handles will be inherited from the parent.  Additionally, stderr
+      can be STDOUT, which indicates that the stderr data from the
+      applications should be captured into the same file handle as for
+      stdout.
+
+    - If preexec_fn is set to a callable object, this object will be
+      called in the child process just before the child is executed.
+
+    - If close_fds is true, all file descriptors except 0, 1 and 2
+      will be closed before the child process is executed.
+
+    - If shell is true, the specified command will be executed through
+      the shell.  
+
+    - If cwd is not None, the current directory will be changed to cwd
+      before the child is executed.
+
+    - If env is not None, it defines the environment variables for the
+      new process.
+
+    - If universal_newlines is true, the file objects stdout and
+      stderr are opened as a text file, but lines may be terminated
+      by any of '\n', the Unix end-of-line convention, '\r', the
+      Macintosh convention or '\r\n', the Windows convention.  All of
+      these external representations are seen as '\n' by the Python
+      program.  Note: This feature is only available if Python is
+      built with universal newline support (the default).  Also, the
+      newlines attribute of the file objects stdout, stdin and stderr
+      are not updated by the communicate() method.
+
+    - The startupinfo and creationflags, if given, will be passed to
+      the underlying CreateProcess() function.  They can specify
+      things such as appearance of the main window and priority for
+      the new process.  (Windows only)
+
+
+      This module also defines two shortcut functions:
+
+    - call(*args, **kwargs):
+          Run command with arguments.  Wait for command to complete,
+          then return the returncode attribute.
+
+          The arguments are the same as for the Popen constructor.
+          Example:
+
+          retcode = call(["ls", "-l"])
+
+
+    Exceptions
+    ----------
+
+    Exceptions raised in the child process, before the new program has
+    started to execute, will be re-raised in the parent.
+    Additionally, the exception object will have one extra attribute
+    called 'child_traceback', which is a string containing traceback
+    information from the child's point of view.
+
+    The most common exception raised is OSError.  This occurs, for
+    example, when trying to execute a non-existent file.  Applications
+    should prepare for OSErrors.
+
+    A ValueError will be raised if Popen is called with invalid
+    arguments.
+
+
+    Security
+    --------
+
+    Unlike some other popen functions, this implementation will never
+    call /bin/sh implicitly.  This means that all characters,
+    including shell meta-characters, can safely be passed to child
+    processes.
+
+
+    Popen objects
+    -------------
+
+    Instances of the Popen class have the following methods:
+
+    poll()
+        Check if child process has terminated.  Returns returncode
+        attribute.
+
+    wait()
+        Wait for child process to terminate.  Returns returncode
+        attribute.
+
+    communicate(input=None)
+        Interact with process: Send data to stdin.  Read data from
+        stdout and stderr, until end-of-file is reached.  Wait for
+        process to terminate.  The optional stdin argument should be a
+        string to be sent to the child process, or None, if no data
+        should be sent to the child.
+
+        communicate() returns a tuple (stdout, stderr).
+
+        Note: The data read is buffered in memory, so do not use this
+        method if the data size is large or unlimited.
+
+    The following attributes are also available:
+
+    stdin
+        If the stdin argument is PIPE, this attribute is a file object
+        that provides input to the child process.  Otherwise, it is
+        None.
+
+    stdout
+        If the stdout argument is PIPE, this attribute is a file
+        object that provides output from the child process.
+        Otherwise, it is None.
+
+    stderr
+        If the stderr argument is PIPE, this attribute is file object
+        that provides error output from the child process.  Otherwise,
+        it is None.
+
+    pid
+        The process ID of the child process.
+
+    returncode
+        The child return code.  A None value indicates that the
+        process hasn't terminated yet.  A negative value -N indicates
+        that the child was terminated by signal N (UNIX only).
+
+
+Replacing older functions with the subprocess module
+
+    In this section, "a ==> b" means that b can be used as a
+    replacement for a.
+
+    Note: All functions in this section fail (more or less) silently
+    if the executed program cannot be found; this module raises an
+    OSError exception.
+
+    In the following examples, we assume that the subprocess module is
+    imported with "from subprocess import *".
+
+
+    Replacing /bin/sh shell backquote
+    ---------------------------------
+
+    output=`mycmd myarg`
+    ==>
+    output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0]
+
+
+    Replacing shell pipe line
+    -------------------------
+
+    output=`dmesg | grep hda`
+    ==>
+    p1 = Popen(["dmesg"], stdout=PIPE)
+    p2 = Popen(["grep", "hda"], stdin=p1.stdout, stdout=PIPE)
+    output = p2.communicate()[0]
+
+
+    Replacing os.system()
+    ---------------------
+
+    sts = os.system("mycmd" + " myarg")
+    ==>
+    p = Popen("mycmd" + " myarg", shell=True)
+    sts = os.waitpid(p.pid, 0)
+
+    Note:
+
+    * Calling the program through the shell is usually not required.
+
+    * It's easier to look at the returncode attribute than the
+      exit status.
+
+    A more real-world example would look like this:
+
+    try:
+        retcode = call("mycmd" + " myarg", shell=True)
+        if retcode < 0:
+            print >>sys.stderr, "Child was terminated by signal", -retcode
+        else:
+            print >>sys.stderr, "Child returned", retcode
+    except OSError, e:
+        print >>sys.stderr, "Execution failed:", e
+
+
+    Replacing os.spawn*
+    -------------------
+
+    P_NOWAIT example:
+
+    pid = os.spawnlp(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg")
+    ==>
+    pid = Popen(["/bin/mycmd", "myarg"]).pid
+
+
+    P_WAIT example:
+
+    retcode = os.spawnlp(os.P_WAIT, "/bin/mycmd", "mycmd", "myarg")
+    ==>
+    retcode = call(["/bin/mycmd", "myarg"])
+
+
+    Vector example:
+
+    os.spawnvp(os.P_NOWAIT, path, args)
+    ==>
+    Popen([path] + args[1:])
+
+
+    Environment example:
+
+    os.spawnlpe(os.P_NOWAIT, "/bin/mycmd", "mycmd", "myarg", env)
+    ==>
+    Popen(["/bin/mycmd", "myarg"], env={"PATH": "/usr/bin"})
+
+
+    Replacing os.popen*
+    -------------------
+
+    pipe = os.popen(cmd, mode='r', bufsize)
+    ==>
+    pipe = Popen(cmd, shell=True, bufsize=bufsize, stdout=PIPE).stdout
+
+    pipe = os.popen(cmd, mode='w', bufsize)
+    ==>
+    pipe = Popen(cmd, shell=True, bufsize=bufsize, stdin=PIPE).stdin
+
+
+    (child_stdin, child_stdout) = os.popen2(cmd, mode, bufsize)
+    ==>
+    p = Popen(cmd, shell=True, bufsize=bufsize,
+              stdin=PIPE, stdout=PIPE, close_fds=True)
+    (child_stdin, child_stdout) = (p.stdin, p.stdout)
+
+
+    (child_stdin,
+     child_stdout,
+     child_stderr) = os.popen3(cmd, mode, bufsize)
+    ==>
+    p = Popen(cmd, shell=True, bufsize=bufsize,
+              stdin=PIPE, stdout=PIPE, stderr=PIPE, close_fds=True)
+    (child_stdin,
+     child_stdout,
+     child_stderr) = (p.stdin, p.stdout, p.stderr)
+
+
+    (child_stdin, child_stdout_and_stderr) = os.popen4(cmd, mode, bufsize)
+    ==>
+    p = Popen(cmd, shell=True, bufsize=bufsize,
+              stdin=PIPE, stdout=PIPE, stderr=STDOUT, close_fds=True)
+    (child_stdin, child_stdout_and_stderr) = (p.stdin, p.stdout)
+
+
+    Replacing popen2.*
+    ------------------
+
+    Note: If the cmd argument to popen2 functions is a string, the
+    command is executed through /bin/sh.  If it is a list, the command
+    is directly executed.
+
+    (child_stdout, child_stdin) = popen2.popen2("somestring", bufsize, mode)
+    ==>
+    p = Popen(["somestring"], shell=True, bufsize=bufsize
+              stdin=PIPE, stdout=PIPE, close_fds=True)
+    (child_stdout, child_stdin) = (p.stdout, p.stdin)
+
+
+    (child_stdout, child_stdin) = popen2.popen2(["mycmd", "myarg"], bufsize, mode)
+    ==>
+    p = Popen(["mycmd", "myarg"], bufsize=bufsize,
+              stdin=PIPE, stdout=PIPE, close_fds=True)
+    (child_stdout, child_stdin) = (p.stdout, p.stdin)
+
+    The popen2.Popen3 and popen3.Popen4 basically works as
+    subprocess.Popen, except that:
+
+    * subprocess.Popen raises an exception if the execution fails
+    * the capturestderr argument is replaced with the stderr argument.
+    * stdin=PIPE and stdout=PIPE must be specified.
+    * popen2 closes all file descriptors by default, but you have to
+      specify close_fds=True with subprocess.Popen.
+
+
+Open Issues
+
+    Some features have been requested but is not yet implemented.
+    This includes:
+
+    * Support for managing a whole flock of subprocesses
+
+    * Support for managing "daemon" processes
+
+    * Built-in method for killing subprocesses
+
+    While these are useful features, it's expected that these can be
+    added later without problems.
+
+    * expect-like functionality, including pty support.
+
+    pty support is highly platform-dependent, which is a
+    problem.  Also, there are already other modules that provide this
+    kind of functionality[6].
+
+
+Backwards Compatibility
+
+    Since this is a new module, no major backward compatible issues
+    are expected.  The module name "subprocess" might collide with
+    other, previous modules[3] with the same name, but the name
+    "subprocess" seems to be the best suggested name so far.  The
+    first name of this module was "popen5", but this name was
+    considered too unintuitive.  For a while, the module was called
+    "process", but this name is already used by Trent Mick's
+    module[4].
+
+    The functions and modules that this new module is trying to
+    replace (os.system, os.spawn*, os.popen*, popen2.*, commands.*)
+    are expected to be available in future Python versions for a long
+    time, to preserve backwards compatibility.
+
+
+Reference Implementation
+
+    A reference implementation is available from
+    http://www.lysator.liu.se/~astrand/popen5/.
+
+
+References
+
+    [1] Secure Programming for Linux and Unix HOWTO, section 8.3.
+        http://www.dwheeler.com/secure-programs/
+
+    [2] Python Dialog
+        http://pythondialog.sourceforge.net/
+
+    [3] http://www.iol.ie/~padraiga/libs/subProcess.py
+
+    [4] http://starship.python.net/crew/tmick/
+
+    [5] http://starship.python.net/crew/mhammond/win32/
+
+    [6] http://www.lysator.liu.se/~ceder/pcl-expect/
+
+
+Copyright
+
+    This document has been placed in the public domain.
+
+
+Local Variables:
+mode: indented-text
+indent-tabs-mode: nil
+sentence-end-double-space: t
+fill-column: 70
+End: