--- /root/CreatePdfDocument2_4_2.py	2010-09-18 18:23:23.000000000 +0200
+++ CreatePdfDocument.py	2014-08-18 03:50:11.370056029 +0200
@@ -212,6 +212,7 @@
 import re
 import copy
 import shutil
+import subprocess
 import StringIO
 import array
 
@@ -496,30 +497,9 @@
     return editorname
 
 
-def pipeCommand(cmdstr, input=None):
-    child_stdin, child_stdout, child_stderr = os.popen3(cmdstr, u'b')
-    try:
-        if input:
-            child_stdin.write(input)
-        child_stdin.close()
-    except:
-        pass
-
-    child_output = child_stdout.read()
-    child_stdout.close()
-
-    child_error = child_stderr.read()
-    child_stderr.close()
-
-    if os.name in ['posix', 'mac']:
-        try:
-            # REMARK: Otherwise we get <defunct> processes.
-            os.wait()
-        except OSError, e:
-            # 10: No child processes.
-            if e.errno != 10:
-                raise
-    return (child_output, child_error)
+def pipeCommand(tokens, input_data=None):
+    proc = subprocess.Popen(tokens, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE, close_fds=True)
+    return proc.communicate(input_data)
 
 
 class CreatePdfDocument(ActionBase):
@@ -1850,8 +1830,8 @@
         if self.debug:
             self.wrapper_emit_http_headers()
             errmsg = self._(u'HTMLDOC command:') + u'<pre>' + wikiutil.escape(cmdstr) + u'</pre>'
-            cmdstr = self.default_values['htmldoc_cmd'] + u' --help'
-            (htmldoc_help, htmldoc_err) = pipeCommand(cmdstr)
+            htmldocopts = [self.default_values['htmldoc_cmd'], u'--help']
+            (htmldoc_help, htmldoc_err) = pipeCommand(htmldocopts)
             errmsg += u'<p>Execute <tt>%s</tt><br /><pre>%s</pre></p>' % (wikiutil.escape(cmdstr), wikiutil.escape(htmldoc_help),)
             if 'env' in self.request.__dict__:
                 reqenv = u'%s' % wikiutil.escape(self.request.env)
@@ -1859,7 +1839,7 @@
                 reqenv = u'None'
             errmsg += u'<p>Python release %s<br />MoinMoin release <tt>%s</tt><br />CreatePdfDocument release <tt>%s</tt><br />self.request = <tt>%s</tt><br />self.request.env = <tt>%s</tt><br />os.environ = <tt>%s</tt></p>' % (wikiutil.escape(sys.version), wikiutil.escape(moinmoin_release), wikiutil.escape(__version__), wikiutil.escape(type(self.request)), wikiutil.escape(reqenv), wikiutil.escape(u"%s" % os.environ),)
         else:
-            (pdf, htmldoc_err) = pipeCommand(cmdstr, html)
+            (pdf, htmldoc_err) = pipeCommand(htmldocopts, html)
 
             # Check for error message on STDOUT.
             if pdf[:8] == u'HTMLDOC ':
