推荐一个大神的人工智能教程!http://blog.csdn.net/jiangjunshow
最近遇到os.system()执行系统命令的情况,上网搜集了一下资料,整理如下,以备不时之需,同时也希望能帮到某些人。
一、python中的 os.system(cmd)的返回值与linux命令返回值(具体参见本文附加内容)的关系
大家都习惯用os.systemv()函数执行linux命令,该函数的返回值十进制数(分别对应一个16位的二进制数)。该函数的返回值与 linux命令返回值两者的转换关系为:该函数的返回值(十进制)转化成16二进制数,截取其高八位(如果低位数是0的情况下,有关操作系统的错误码共 131个,所以低位都是零),然后转乘十进制数即为 linux命令返回值0。
例如:
os.system()返回值为0 linux命令返回值也为0.
os.system()返回值为256,十六位二进制数示为:00000001,00000000,高八位转乘十进制为 1 对应 linux命令返回值 1
os.system()返回值为512,十六位二进制数示为:00000010,00000000,高八位转乘十进制为 2 对应 linux命令返回值 2
......其它同理
os.system()返回值为32512,十六位二进制数示为:01111111,00000000,高八位转乘十进制为 127 对应 linux命令返回值 127
/**********************************************************************************************************************/
问题:/bin/xxx.py是一个返回码为1的程序。当python 程序使用os.system(”./bin/xxx.py”) 这样调用的时候, 成功运行后os.system 的返回值出现了问题,变成了256 ,也就是0×100。而不是正常应该返回的1。
解决:查阅了文档发现os.system()的返回为:
On Unix, the return value is the exit status of the process encoded in the format specified for wait().
而os.wait()的返回为:
a 16-bit number, whose low byte is the signal number that killed the process, and whose high byte is the exit status (if the signal number
is zero);
os.system的返回值并不是执行程序的返回结果。而是一个16位的数,它的高位才是返回码。也就是说os.system()返回256即 0×0100,返回码应该是其高位0×01即1。所以要获取程序运行退出的值(比如C的main函数中的return 0),需要处理一下。
ret = os.system('./a.out')
ret >>= 8
这样才能获取到正确的返回值。另外还要注意:python获取到的值是无符号整数,所以返回负值的时候,打印出来是很大的正值。比如返回-1,python 会获取到2