python exit code 1_Python中读取子进程的exit code(也作status code或return code)

今天在做把Shell脚本翻译成Python脚本的日常,对于Shell中$?的用法引伸出一个问题,就是在Python脚本中如何读取上一步运行进程的exit code,也看到有作status code或return code的叫法,经过我的理解觉得是一个东西。简单地说,TA就是C语言中main函数的return值(类型为int)。

先请看Shell脚本伪代码:

function show_exitcode {

./one_application $1 $2

if [[ $? -ne 0 ]]; then

echo "One Application Error."

}

那么问题来了,这段Shell脚本函数,如何用Python表达呢:

def show_exit_code(*args):

from subprocess import Popen

p_handler = Popen(

"./one_application {} {}".format(args[0], args[1]),

shell=True

)

p_handler.wait()

if '0' != p_handler.returncode:

print("One Application Error.")

说到subprocess模块,经常使用Python开发运行脚本的朋友们会相对熟悉一些。TA的作用就是通过Shell命令,运行一个第三方程序或第三方脚本,通过创建Popen的实例化对象,并将其实例化对象视作为操作这个第三方程序或者脚本的句柄对象。

PS:实际上,除了Popen之外,上古操作之一,os.system()的返回值就是exit code(类型int),就趋势而言,Pythonista们更倾向于享用subprocess对os库中系统操作的完善而带来的便利。当然,这也是个人习惯使然。

理解了这一层的操作,我们还有一个升级版的玩法,在Python脚本内部通过内建多进程库multiprocessing创建的子进程,可否读到exit code呢?Sure!

#!/usr/bin/env python3

from multiprocessing import Process

def exit_func():

print('Error 233')

exit(233)

if __name__ =='__main__':

p_handler = Process(target=exit_func)

p_handler.start()

p_handler.join()

print(p_handler.exitcode) # 结果:233

总结:

1)使用subprocess库调用的第三方程序或脚本子进程,可以读取Popen实例对象的returncode属性,即exit code;

2)使用multiprocessing库创建的子进程,可以读取Process实例对象的exitcode属性,即exit code;

3)目前为止,发现Python完全可以替代shell脚本实现功能,不同意者欢迎留言扔砖。

感谢您的支持和打赏 (= ̄ω ̄=) --> BuyMeACoffee(Paypal)

如果喜欢这篇文章,记得收藏和点 ❤ 噢 ~ ~

你可能感兴趣的:(python,exit,code,1)