利用python subprocess模块从系统获取程序运行状态返回值的方法

最近在编写一个工具的时候遇到一个很棘手的问题:linux开发环境下对静态语言程序进行自动化批量编译,需要根据编译结果执行一定的操作,但是bash调用编译器的bin程序对文件进行编译之后的状态有点棘手。
一开始想到的方法是,直接在工具中写死:

import os
os.system('gcc <_file> ;echo $?')

通过在执行编译命令后紧接着执行echo $?命令获取上一条命令gcc <_file>的状态返回值,当编译无误时获得标准输出0,异常的时候同时标准输出编译失败的标准错误输出,以及echo获取的状态码:

stanpao@vm:~$ gcc haha ;echo $?
/usr/bin/ld:haha: file format not recognized; treating as linker script
/usr/bin/ld:haha:1: syntax error
collect2: error: ld returned 1 exit status
1

显然system方法只能获取标准输出,但是不能从标准输出中提取内容。也许有人觉得用os.popen()执行bash命令,可以返回文件对象,解析提取最后一行的状态码:

import os
print('the status code is:',os.popen('gcc haha;echo $?').readlines()[-1])
----------------------------
stanpao@vm:~$ python test.py 
/usr/bin/ld:haha: file format not recognized; treating as linker script
/usr/bin/ld:haha:1: syntax 
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值