def popen(cmd, stdout=None, stderr=None, output_stream=STREAM_BOTH, env=None, extra_env=None):
"""Open a pipe to an external process and return a Popen object."""
info = None
if os.name == 'nt':
info = subprocess.STARTUPINFO()
info.dwFlags |= subprocess.STARTF_USESTDHANDLES | subprocess.STARTF_USESHOWWINDOW
info.wShowWindow = subprocess.SW_HIDE
if output_stream == STREAM_BOTH:
stdout = stdout or subprocess.PIPE
stderr = stderr or subprocess.PIPE
elif output_stream == STREAM_STDOUT:
stdout = stdout or subprocess.PIPE
stderr = subprocess.DEVNULL
else: # STREAM_STDERR
stdout = subprocess.DEVNULL
stderr = stderr or subprocess.PIPE
if env is None:
env = create_environment()
if extra_env is not None:
env.update(extra_env)
try:
return subprocess.Popen(
cmd,
stdin=subprocess.PIPE,
stdout=stdout,
stderr=stderr,
startupinfo=info,
env=env
)
except Exception as err:
from . import persist
persist.printf('ERROR: could not launch', repr(cmd))
persist.printf('reason:', str(err))
persist.printf('PATH:', env.get('PATH', ''))
# view utils
评论列表
文章目录