Esempio n. 1
0
 def _get_process(self):
     debug.dbg('Start environment subprocess %s', self._executable)
     parso_path = sys.modules['parso'].__file__
     args = (
         self._executable,
         _MAIN_PATH,
         os.path.dirname(os.path.dirname(parso_path)),
         '.'.join(str(x) for x in sys.version_info[:3]),
     )
     process = GeneralizedPopen(
         args,
         stdin=subprocess.PIPE,
         stdout=subprocess.PIPE,
         stderr=subprocess.PIPE,
         # Use system default buffering on Python 2 to improve performance
         # (this is already the case on Python 3).
         bufsize=-1)
     self._stderr_queue = Queue()
     self._stderr_thread = t = Thread(target=_enqueue_output,
                                      args=(process.stderr,
                                            self._stderr_queue))
     t.daemon = True
     t.start()
     # Ensure the subprocess is properly cleaned up when the object
     # is garbage collected.
     self._cleanup_callable = weakref.finalize(self, _cleanup_process,
                                               process, t)
     return process
Esempio n. 2
0
 def _get_process(self):
     debug.dbg('Start environment subprocess %s', self._executable)
     parso_path = sys.modules['parso'].__file__
     args = (
         self._executable,
         _MAIN_PATH,
         os.path.dirname(os.path.dirname(parso_path)),
         '.'.join(str(x) for x in sys.version_info[:3]),
     )
     # Use explicit envionment to ensure reliable results (#1540)
     env = {}
     if os.name == 'nt':
         # if SYSTEMROOT (or case variant) exists in environment,
         # ensure it goes to subprocess
         for k, v in os.environ.items():
             if 'SYSTEMROOT' == k.upper():
                 env.update({k: os.environ[k]})
                 break  # don't risk multiple entries
     process = GeneralizedPopen(
         args,
         stdin=subprocess.PIPE,
         stdout=subprocess.PIPE,
         stderr=subprocess.PIPE,
         # Use system default buffering on Python 2 to improve performance
         # (this is already the case on Python 3).
         bufsize=-1,
         env=env)
     self._stderr_queue = Queue()
     self._stderr_thread = t = Thread(target=_enqueue_output,
                                      args=(process.stderr,
                                            self._stderr_queue))
     t.daemon = True
     t.start()
     # Ensure the subprocess is properly cleaned up when the object
     # is garbage collected.
     self._cleanup_callable = weakref.finalize(self, _cleanup_process,
                                               process, t)
     return process