2 Star 0 Fork 0

王光格/auto_hotpatch

加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
该仓库未声明开源许可证文件(LICENSE),使用请关注具体项目描述及其代码上游依赖。
克隆/下载
util.py 3.01 KB
一键复制 编辑 原始数据 按行查看 历史
#!/usr/bin/python3
# ******************************************************************************
# Copyright (c) Huawei Technologies Co., Ltd. 2024-2024. All rights reserved.
# licensed under the Mulan PSL v2.
# You can use this software according to the terms and conditions of the Mulan PSL v2.
# You may obtain a copy of Mulan PSL v2 at:
# http://license.coscl.org.cn/MulanPSL2
# THIS SOFTWARE IS PROVIDED ON AN "AS IS" BASIS, WITHOUT WARRANTIES OF ANY KIND, EITHER EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO NON-INFRINGEMENT, MERCHANTABILITY OR FIT FOR A PARTICULAR
# PURPOSE.
# See the Mulan PSL v2 for more details.
# ******************************************************************************/
import logging
import shlex
import subprocess
from typing import Tuple
SUCCESS = "Succeed"
FAIL = "failed"
class CommandExitCode:
SUCCEED = 0
FAIL = 255
class TaskExecuteRes:
SUCCEED = "succeed"
FAIL = "fail"
def execute_shell_command(command: str, **kwargs) -> Tuple[int, str, str]:
"""
execute shell commands
Args:
command(str): shell command which needs to execute
**kwargs: keyword arguments, it is used to create Popen object.supported options: env, cwd, bufsize, group and
so on. you can see more options information in annotation of Popen obejct.
Returns:
Tuple[int, str, str]
a tuple containing three elements (return code, standard output, standard error).
Example usage:
>>> return_code, stdout, stderr = execute_shell_command("ls -al|wc -l", **{"env": {"LANG": "en_US.utf-8"}})
>>> print(return_code, stdout, stderr)
0, 42, ""
"""
commands = command.split('|')
process = None
stdout_data = ""
stderr_data = ""
try:
for index, cmd in enumerate(commands):
cmd_list = shlex.split(cmd)
if index == 0:
process = subprocess.Popen(
cmd_list,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=subprocess.PIPE,
encoding='utf-8',
**kwargs,
)
else:
process = subprocess.Popen(
cmd_list,
stdin=process.stdout,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
encoding='utf-8',
**kwargs,
)
stdout, stderr = process.communicate()
stderr_data += stderr
stdout_data += stdout
return process.returncode, stdout_data.strip(), stderr_data.strip()
except Exception as error:
logging.error(error)
return CommandExitCode.FAIL, stdout_data, str(error)
if __name__ == '__main__':
cmd = "sudo cp -r \'/home/wgg/project/auto_hotpatch/patch_files/CVE-2023-51042/openEuler-20.03-LTS-SP1/*\' \'/home/wgg/project/auto_hotpatch/remote_test_files/openEuler-20.03-LTS-SP1/CVE-2023-51042\'"
result = execute_shell_command(cmd)
print(result)
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
1
https://gitee.com/wang-guangge/auto_hotpatch.git
git@gitee.com:wang-guangge/auto_hotpatch.git
wang-guangge
auto_hotpatch
auto_hotpatch
master

搜索帮助