在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