home *** CD-ROM | disk | FTP | other *** search
/ Chip 2011 November / CHIP_2011_11.iso / Programy / Narzedzia / Calibre / calibre-0.8.18.msi / file_262 / popen2.pyo (.txt) < prev    next >
Encoding:
Python Compiled Bytecode  |  2011-09-09  |  4.5 KB  |  163 lines

  1. # Source Generated with Decompyle++
  2. # File: in.pyo (Python 2.7)
  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.             
  29.  
  30.  
  31.  
  32. class Popen3:
  33.     sts = -1
  34.     
  35.     def __init__(self, cmd, capturestderr = False, bufsize = -1):
  36.         _cleanup()
  37.         self.cmd = cmd
  38.         (p2cread, p2cwrite) = os.pipe()
  39.         (c2pread, c2pwrite) = os.pipe()
  40.         if capturestderr:
  41.             (errout, errin) = os.pipe()
  42.         self.pid = os.fork()
  43.         if self.pid == 0:
  44.             os.dup2(p2cread, 0)
  45.             os.dup2(c2pwrite, 1)
  46.             if capturestderr:
  47.                 os.dup2(errin, 2)
  48.             self._run_child(cmd)
  49.         os.close(p2cread)
  50.         self.tochild = os.fdopen(p2cwrite, 'w', bufsize)
  51.         os.close(c2pwrite)
  52.         self.fromchild = os.fdopen(c2pread, 'r', bufsize)
  53.         if capturestderr:
  54.             os.close(errin)
  55.             self.childerr = os.fdopen(errout, 'r', bufsize)
  56.         else:
  57.             self.childerr = None
  58.  
  59.     
  60.     def __del__(self):
  61.         self.poll(_deadstate = sys.maxint)
  62.         if self.sts < 0 and _active is not None:
  63.             _active.append(self)
  64.         
  65.  
  66.     
  67.     def _run_child(self, cmd):
  68.         if isinstance(cmd, basestring):
  69.             cmd = [
  70.                 '/bin/sh',
  71.                 '-c',
  72.                 cmd]
  73.         os.closerange(3, MAXFD)
  74.         
  75.         try:
  76.             os.execvp(cmd[0], cmd)
  77.         finally:
  78.             os._exit(1)
  79.  
  80.  
  81.     
  82.     def poll(self, _deadstate = None):
  83.         if self.sts < 0:
  84.             
  85.             try:
  86.                 (pid, sts) = os.waitpid(self.pid, os.WNOHANG)
  87.                 if pid == self.pid:
  88.                     self.sts = sts
  89.             except os.error:
  90.                 if _deadstate is not None:
  91.                     self.sts = _deadstate
  92.                 
  93.             
  94.  
  95.         return self.sts
  96.  
  97.     
  98.     def wait(self):
  99.         if self.sts < 0:
  100.             (pid, sts) = os.waitpid(self.pid, 0)
  101.             self.sts = sts
  102.         return self.sts
  103.  
  104.  
  105.  
  106. class Popen4(Popen3):
  107.     childerr = None
  108.     
  109.     def __init__(self, cmd, bufsize = -1):
  110.         _cleanup()
  111.         self.cmd = cmd
  112.         (p2cread, p2cwrite) = os.pipe()
  113.         (c2pread, c2pwrite) = os.pipe()
  114.         self.pid = os.fork()
  115.         if self.pid == 0:
  116.             os.dup2(p2cread, 0)
  117.             os.dup2(c2pwrite, 1)
  118.             os.dup2(c2pwrite, 2)
  119.             self._run_child(cmd)
  120.         os.close(p2cread)
  121.         self.tochild = os.fdopen(p2cwrite, 'w', bufsize)
  122.         os.close(c2pwrite)
  123.         self.fromchild = os.fdopen(c2pread, 'r', bufsize)
  124.  
  125.  
  126. if sys.platform[:3] == 'win' or sys.platform == 'os2emx':
  127.     del Popen3
  128.     del Popen4
  129.     
  130.     def popen2(cmd, bufsize = -1, mode = 't'):
  131.         (w, r) = os.popen2(cmd, mode, bufsize)
  132.         return (r, w)
  133.  
  134.     
  135.     def popen3(cmd, bufsize = -1, mode = 't'):
  136.         (w, r, e) = os.popen3(cmd, mode, bufsize)
  137.         return (r, w, e)
  138.  
  139.     
  140.     def popen4(cmd, bufsize = -1, mode = 't'):
  141.         (w, r) = os.popen4(cmd, mode, bufsize)
  142.         return (r, w)
  143.  
  144. else:
  145.     
  146.     def popen2(cmd, bufsize = -1, mode = 't'):
  147.         inst = Popen3(cmd, False, bufsize)
  148.         return (inst.fromchild, inst.tochild)
  149.  
  150.     
  151.     def popen3(cmd, bufsize = -1, mode = 't'):
  152.         inst = Popen3(cmd, True, bufsize)
  153.         return (inst.fromchild, inst.tochild, inst.childerr)
  154.  
  155.     
  156.     def popen4(cmd, bufsize = -1, mode = 't'):
  157.         inst = Popen4(cmd, bufsize)
  158.         return (inst.fromchild, inst.tochild)
  159.  
  160.     __all__.extend([
  161.         'Popen3',
  162.         'Popen4'])
  163.