python获取子进程返回值_从Python子进程返回值

返回代码由poll调用返回,并且(一旦poll不返回None)可通过returncode属性访问.您已经在代码中使用了这个,所以我不确定您的问题是什么.

如果要在进程运行时更新控件,请使用readline而不是read:后者将等待整个输出存在,​​而前者将等待换行符.要使用变量名称提供完整示例:

from subprocess import Popen, PIPE

self.myproc = Popen('dir /s', shell=True, stdout=PIPE, stderr=PIPE)

while self.myproc.poll() == None:

self._parent.AppendUpdate(self.myproc.stdout.readline())

self._parent.AppendUpdate('Return code was ' + self.myproc.returncode)

请注意,您可能希望.strip()读取结果,因为它将包含换行符.

编辑:为解决脚本输出与其返回代码之间的混淆,请执行以下操作.首先,模块级别的Python脚本无法返回值:这会产生语法错误.所以你应该区分的是脚本的输出和它给出的返回代码.

通过使用self.myproc.stdout.readline方法读取上面示例中的脚本输出.每次外部进程产生一行输出文本时,调用该函数将检索它.

但是返回代码(或退出状态)是一个从子进程传递到父进程的整数,表示子进程退出的状态.在Python中,您可以使用sys.exit函数执行此操作.最常见的是,当该值为零时,表示成功;非零值描述了某种错误.

假设您的子进程脚本如下所示:

import sys

# Do some stuff

print 'pass' # Gets to stdout

sys.exit(0) # Return code

使用Popen类执行这个外部文件(让我们称之为test.py),当我们读出self.myproc.stdout时我们会通过,当我们读出self.myproc.poll(或者self.myproc.returncode之后)时我们会得到0.第一次投票).

此返回代码的目的是您不必解析所有子进程的输出以确定它是否在其作业中成功:您可以自由定义自己的退出代码.例如,您可以认为0表示成功,1表示失败,2表示某种无效输入,9表示未知错误,依此类推.这样,您可以继续轮询该过程,并根据该轮询返回的退出代码直接知道它是否成功.请注意,这有点不太适用于您的情况,因为您仍然需要子进程的输出,但仍然更容易解析数字而不是字符串来确定成功.

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值