home *** CD-ROM | disk | FTP | other *** search
/ Maximum CD 2010 November / maximum-cd-2010-11.iso / DiscContents / calibre-0.7.13.msi / file_671 (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2010-08-06  |  4.5 KB  |  178 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyc (Python 2.6)
  3.  
  4. import os
  5. import sys
  6. import warnings
  7. warnings.warn('The popen2 module is deprecated.  Use the subprocess module.', DeprecationWarning, stacklevel = 2)
  8. __all__ = [
  9.     'popen2',
  10.     'popen3',
  11.     'popen4']
  12.  
  13. try:
  14.     MAXFD = os.sysconf('SC_OPEN_MAX')
  15. except (AttributeError, ValueError):
  16.     MAXFD = 256
  17.  
  18. _active = []
  19.  
  20. def _cleanup():
  21.     for inst in _active[:]:
  22.         if inst.poll(_deadstate = sys.maxint) >= 0:
  23.             
  24.             try:
  25.                 _active.remove(inst)
  26.             except ValueError:
  27.                 pass
  28.             except:
  29.                 None<EXCEPTION MATCH>ValueError
  30.             
  31.  
  32.         None<EXCEPTION MATCH>ValueError
  33.     
  34.  
  35.  
  36. class Popen3:
  37.     sts = -1
  38.     
  39.     def __init__(self, cmd, capturestderr = False, bufsize = -1):
  40.         _cleanup()
  41.         self.cmd = cmd
  42.         (p2cread, p2cwrite) = os.pipe()
  43.         (c2pread, c2pwrite) = os.pipe()
  44.         if capturestderr:
  45.             (errout, errin) = os.pipe()
  46.         
  47.         self.pid = os.fork()
  48.         if self.pid == 0:
  49.             os.dup2(p2cread, 0)
  50.             os.dup2(c2pwrite, 1)
  51.             if capturestderr:
  52.                 os.dup2(errin, 2)
  53.             
  54.             self._run_child(cmd)
  55.         
  56.         os.close(p2cread)
  57.         self.tochild = os.fdopen(p2cwrite, 'w', bufsize)
  58.         os.close(c2pwrite)
  59.         self.fromchild = os.fdopen(c2pread, 'r', bufsize)
  60.         if capturestderr:
  61.             os.close(errin)
  62.             self.childerr = os.fdopen(errout, 'r', bufsize)
  63.         else:
  64.             self.childerr = None
  65.  
  66.     
  67.     def __del__(self):
  68.         self.poll(_deadstate = sys.maxint)
  69.         if self.sts < 0:
  70.             if _active is not None:
  71.                 _active.append(self)
  72.             
  73.         
  74.  
  75.     
  76.     def _run_child(self, cmd):
  77.         if isinstance(cmd, basestring):
  78.             cmd = [
  79.                 '/bin/sh',
  80.                 '-c',
  81.                 cmd]
  82.         
  83.         os.closerange(3, MAXFD)
  84.         
  85.         try:
  86.             os.execvp(cmd[0], cmd)
  87.         finally:
  88.             os._exit(1)
  89.  
  90.  
  91.     
  92.     def poll(self, _deadstate = None):
  93.         if self.sts < 0:
  94.             
  95.             try:
  96.                 (pid, sts) = os.waitpid(self.pid, os.WNOHANG)
  97.                 if pid == self.pid:
  98.                     self.sts = sts
  99.             except os.error:
  100.                 if _deadstate is not None:
  101.                     self.sts = _deadstate
  102.                 
  103.             except:
  104.                 _deadstate is not None
  105.             
  106.  
  107.         None<EXCEPTION MATCH>os.error
  108.         return self.sts
  109.  
  110.     
  111.     def wait(self):
  112.         if self.sts < 0:
  113.             (pid, sts) = os.waitpid(self.pid, 0)
  114.             self.sts = sts
  115.         
  116.         return self.sts
  117.  
  118.  
  119.  
  120. class Popen4(Popen3):
  121.     childerr = None
  122.     
  123.     def __init__(self, cmd, bufsize = -1):
  124.         _cleanup()
  125.         self.cmd = cmd
  126.         (p2cread, p2cwrite) = os.pipe()
  127.         (c2pread, c2pwrite) = os.pipe()
  128.         self.pid = os.fork()
  129.         if self.pid == 0:
  130.             os.dup2(p2cread, 0)
  131.             os.dup2(c2pwrite, 1)
  132.             os.dup2(c2pwrite, 2)
  133.             self._run_child(cmd)
  134.         
  135.         os.close(p2cread)
  136.         self.tochild = os.fdopen(p2cwrite, 'w', bufsize)
  137.         os.close(c2pwrite)
  138.         self.fromchild = os.fdopen(c2pread, 'r', bufsize)
  139.  
  140.  
  141. if sys.platform[:3] == 'win' or sys.platform == 'os2emx':
  142.     del Popen3
  143.     del Popen4
  144.     
  145.     def popen2(cmd, bufsize = -1, mode = 't'):
  146.         (w, r) = os.popen2(cmd, mode, bufsize)
  147.         return (r, w)
  148.  
  149.     
  150.     def popen3(cmd, bufsize = -1, mode = 't'):
  151.         (w, r, e) = os.popen3(cmd, mode, bufsize)
  152.         return (r, w, e)
  153.  
  154.     
  155.     def popen4(cmd, bufsize = -1, mode = 't'):
  156.         (w, r) = os.popen4(cmd, mode, bufsize)
  157.         return (r, w)
  158.  
  159. else:
  160.     
  161.     def popen2(cmd, bufsize = -1, mode = 't'):
  162.         inst = Popen3(cmd, False, bufsize)
  163.         return (inst.fromchild, inst.tochild)
  164.  
  165.     
  166.     def popen3(cmd, bufsize = -1, mode = 't'):
  167.         inst = Popen3(cmd, True, bufsize)
  168.         return (inst.fromchild, inst.tochild, inst.childerr)
  169.  
  170.     
  171.     def popen4(cmd, bufsize = -1, mode = 't'):
  172.         inst = Popen4(cmd, bufsize)
  173.         return (inst.fromchild, inst.tochild)
  174.  
  175.     __all__.extend([
  176.         'Popen3',
  177.         'Popen4'])
  178.