python:cmd管道

commands = f"""ssh root@120.7x.254.99 -p2483 
cd /data/wwwroot/csjs2_client_dev
git pull ssh://git@172.16.x.161x:2483/data/repos/csjs2_client_dev.git
"""
import subprocess

def subprocess_popen(commands,stdout=subprocess.PIPE, stderr=subprocess.STDOUT):
    current_process = subprocess.Popen(commands, stdout=stdout, stderr=stderr)
    standoutput, standerr = current_process.communicate()
    current_process.wait()
    current_process.kill()
    print(standoutput)
    return standoutput

subprocess_popen(commands)
备注:commands写的时候第一行 一定要有 否则按照空行 会报错

最新版
import subprocess


def subprocess_popen(**kwargs):
    """
    传参:args命令 和 cwd目录
    """
    error_str = "error"
    # 传过来是啥就是啥

    default_kwargs = {
        "stdout": subprocess.PIPE,
        "stderr": subprocess.PIPE,
    }
    default_kwargs.update(kwargs)
    popen_obj = subprocess.Popen(**default_kwargs)
    stderr_bytes = popen_obj.stderr.read()
    stdout_bytes = popen_obj.stdout.read()

    stdout_str = stdout_bytes.decode('utf8')
    stderr_str = stderr_bytes.decode('utf8')

    print(f"stdout_str:{stdout_str}")
    print(f"stderr_str:{stderr_str}")

    ############ 处理结果
    is_error = False
    # 判断
    if stderr_str.lower().__contains__(error_str) or stderr_str:
        is_error = True

    if stderr_str.lower().__contains__(error_str):
        is_error = True

    #返回格式
    response_data = {
        "stdout_str":stdout_str,
        "stderr_str":stderr_str,
        "error":is_error,# 这个值是True或者False,显示的是带error的那个输出
    }
    return response_data


res = subprocess_popen(args="ls",cwd="/root")
print(f"res:\n{res}")
View Code

 

 
posted @ 2022-08-24 11:49    阅读(19)  评论(0编辑  收藏  举报