Files
openGauss-OM/script/base_utils/common/fast_popen.py
coolany eae422baf3 适配CM组件
Signed-off-by: coolany <kyosang@163.com>

support cgroup

追加合入
2022-03-05 18:51:52 +08:00

48 lines
1.6 KiB
Python

# -*- coding:utf-8 -*-
"""
# Copyright (c): 2012-2020, Huawei Tech. Co., Ltd.
# FileName : FastPopen
# Version : GaussDB Kernel V500R001
# Date : 2020-09-08
# Description : FastPopen
"""
import subprocess
class FastPopen(subprocess.Popen):
"""
optimization subprocess.Popen when close_fds=True,
only close the currently opend file,
reduce the execution time when ulimit is too large
"""
def __init__(self, cmd, bufsize=0,
stdout=None, stderr=None,
preexec_fn=None, close_fds=False,
cwd=None, env=None, universal_newlines=True,
startupinfo=None, creationflags=0, logger=None):
subprocess.Popen.logger = None
subprocess.Popen.__init__(self, ["sh", "-"], bufsize=bufsize, executable=None,
stdin=subprocess.PIPE, stdout=stdout, stderr=stderr,
preexec_fn=preexec_fn, close_fds=close_fds, shell=None,
cwd=cwd, env=env, universal_newlines=universal_newlines,
startupinfo=startupinfo, creationflags=creationflags)
self.logger = logger
self.cmd = cmd
def communicate(self, input_cmd=None, timeout=None):
"""
Get data from stdout and stderr
"""
if input_cmd:
self.cmd = input_cmd
if not isinstance(self.cmd, str):
self.cmd = subprocess.list2cmdline(self.cmd)
std_out, std_err = subprocess.Popen.communicate(self, self.cmd)
return std_out, std_err