python subprocess 子进程实现实时输出

优化前

在这里插入图片描述问题

  • 需要全部加载到内存,占用内存
  • 且程序结束才看得到,看不到程序进度
  • 子进程错误信号没有捕获

优化后

import subprocess
from loguru import logger

if __name__=="__main__":
        client_code = "xxx"
        cmd_path = "xxx.sh"
        run_cmd = f"bash {cmd_path}"

        try:
            process = subprocess.Popen(
                run_cmd,
                shell=True,
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE,
                text=True,
            )
        except FileNotFoundError:
            logger.error(f"{run_cmd} not found")
            raise CmdException(client_code, name, cmd, f"{run_cmd} not found")
        while True:
            output = process.stdout.readline()
            if len(output.strip()) == 0 and process.poll() is not None:
                break
            if output:
                logger.info(f"{output.strip()}")

        return_code = process.poll()
        if return_code != 0:
            logger.error(f"{run_cmd} [Error] errcode : {return_code}")
            raise CmdException(
                client_code, name, cmd, f"{run_cmd} errcode : {return_code}"
            )
        else:
            logger.info(f"{run_cmd} [Success] errcode: {return_code}")

参考

  • https://www.bilibili.com/video/BV1oh4y1e73P/?spm_id_from=333.337.search-card.all.click&vd_source=f0cdbfe2b4f49e9bf456390f79118528
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值