subprocess监控子进程的脚本执行

本文介绍了在Python中如何使用subprocess模块的call、check_call和check_output函数执行脚本,特别是在Linux环境下需要设置shell=True。同时,重点讲解了subprocess.Popen函数,它允许实时获取子进程的输出流,对于需要进行pipe通信的情况非常有用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

 subprocess执行脚本

         在执行命令时,在Linux平台,shell=True,否则会报出找不到文件的错误。shell=True,表示采用操作系统命令终端方式处理。

3.2.1 常用函数

         函数名:call

         定义:subprocess.call(args, *, stdin=None,stdout=None, stderr=None, shell=False)

         示例:subprocess.call("dir",shell=True)

         说明:1 如果shell=True不写入,在windows下无法浏览目录。2 需要pipe通信时,尽量不要用stdoutstderr,容易造成call启动的进程死锁。需要pipe时,可以用Popen函数。

        

         函数名:check_call

         定义:subprocess.check_call(args,*, stdin=None, stdout=None, stderr=None, shell=False)

         示例:subprocess.check_call("dir",shell=True)

         说明:运行结果合call函数一样,从使用方式和结果,没有看到差异。仅在指令不存在时,会处理异常subprocess.CalledProcessError。

 

         函数名:check_output

         定义:subprocess.check_output(args,*, stdin=None, stdout=None, stderr=None, shell=False)

         示例:subprocess.check_output ("dir",shell=True)

         说明:运行结果合call函数一样,从使用方式和结果,没有看到差异。仅在指令不存在时,会处理异常subprocess.CalledProcessError。

 

3.2.2 subprocess.Popen函数

         利用Popen函数执行脚本,可以实时获取新进程的输出流。如下面代码:

def runPython(self, script, reportDict):
    pyPath = script[Schedule.Key_ScriptPath]
    cmd_line = ["python", pyPath]
    print "cmd:", cmd_line
    try:
        self.cmdP = Popen(cmd_line, stdout=subprocess.PIPE, shell=True)
    except Exception,e:
        print e.message

    result = PyRunner.INIT_RESULT
    #print "self.cmdP.poll():", self.cmdP.poll()
    while (self.cmdP.poll() == None) or (self.cmdP.poll() <> 0):
        #print p.poll()
        line= self.cmdP.stdout.readline()
        #print line
        # 解析测试脚本通信指令
        if (line.startswith(PyRunner.SUBP_CMD_HEAD)):
            self.parseScriptCMD(line,script,reportDict)
         这个例子,是执行python脚本。需要获取python脚本执行情况,直接采集python脚本中print输出的日志,可以进行分析。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值