python获取子进程返回值_来自Python子进程的返回值

本文介绍了如何在Python中使用subprocess模块处理子进程的输出和返回代码。通过实例展示了如何利用readline方法实时获取子进程输出,以及如何区分脚本输出与返回代码。

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

returncode由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时,我们将得到pass,当我们读出self.myproc.poll(或第一次轮询后的self.myproc.returncode)时,我们将得到0。

此返回代码的目的是,您不必分析所有子进程的输出来确定它是否成功执行了其任务:您可以自由定义自己的退出代码。例如,可以将0视为成功,1视为失败,2视为给定的某种无效输入,9视为未知错误,等等。这样,您就可以保持进程的poll,并且根据该轮询返回的退出代码,您可以直接知道它是否成功。请注意,这对您的案例不太适用,因为您无论如何都需要子进程的输出,但是解析数字比字符串更容易确定成功与否。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值