python3中os.system(cmd)的返回值

在python中用os.system()的返回值的问题,

我们经常会默认os.system(cmd)的返回值是0,

但是os.system的返回值并不是执行程序的返回结果。而是一个16位的数,它的高位才是返回码。

我们创建一个shel脚本:test.sh,最后的返回码为1:

#!/bin/bash

echo "hello world!"

exit 1

 

我们使用os.system()执行脚本:


>>> import os
>>> cmd='./test.sh'
>>> mm=os.system(cmd)
hello world!
>>> print (mm)
256

可以看到shell脚本执行完成后,返回的值是256,但是跟我们实际想要的值不一样:

os.system的返回值并不是执行程序的返回结果。而是一个16位的数,它的高位才是返回码。也就是说os.system()返回256即 0×0100,返回码应该是其高位0×01即1。

十六位二进制数示为:00000001,00000000,高八位转乘十进制为 1           对应   linux命令返回值 1

>>> import os
>>> mm = os.system('./test.sh')
hello world!
>>> print (mm>>8)
1

当我们把test.sh的exit的值修改为2:

#!/bin/bash
echo "hello world!"
exit 2


>>> import os
>>> mm = os.system('./test.sh')
hello world!
>>> print (mm, mm>>8)
512 2

十六位二进制数示为:00000010,00000000,高八位转乘十进制为 2           对应   linux命令返回值 2

在执行shell脚本的时候,我们并不提倡用os.system()去执行shell脚本,我们可以用Python中的sbuprocess模块

>>> import subprocess
>>> mm=subprocess.call('./test.sh')
hello world!
>>> print (mm)
1

 

 

 

 


版权声明:本文为qq_36380748原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。