Python中os.system()的返回值是什么?

我碰到这个:

>>> import os >>> os.system('ls') file.txt README 0 

什么是os.system()返回值? 为什么我得到0?

os.system的返回值取决于操作系统。

在Unix上,返回值是一个包含两个不同信息的16位数字。 从文档:

一个16位的数字,其低字节是杀死进程的信号编号,高字节是退出状态(如果信号编号为零)

因此,如果信号编号(低字节)为0,理论上,将结果移位8位( result >> 8 )以获得错误代码是安全的。 函数os.WEXITSTATUS正是这样做的。 如果错误代码是0,通常意味着进程没有错误退出。

在Windows上,文档指定os.system的返回值是依赖于shell的。 如果shell是cmd.exe (默认值),则该值是进程的返回码。 再次,0意味着没有错误。

对于其他错误代码:

  • 在Linux上
  • 在Windows上

os.system('command')返回一个16位的数字,左边的前8位(lsb)是用来说明os用来closures指令的信号,接下来的8位是指令的返回码。

 00000000 00000000 exit code signal num 

示例1 – 使用代码1退出命令

 os.system('command') #it returns 256 256 in 16 bits - 00000001 00000000 Exit code is 00000001 which means 1 

示例2 – 使用代码3退出命令

 os.system('command') # it returns 768 768 in 16 bits - 00000011 00000000 Exit code is 00000011 which means 3 

现在尝试使用信号 – 例3 – 写一个长时间睡眠的程序在os.system()中使用它作为命令,然后通过kill -15或kill -9

 os.system('command') #it returns signal num by which it is killed 15 in bits - 00000000 00001111 Signal num is 00001111 which means 15 

你可以有一个Python程序作为命令='python command.py'

 import sys sys.exit(n) # here n would be exit code 

在c或c ++程序的情况下,你可以使用从main()返回或从任何函数退出(n)#

注 – 这适用于unix

在Unix上,返回值是以wait()指定的格式编码的进程的退出状态。 注意,POSIX没有指定C系统()函数返回值的含义,所以Python函数的返回值是依赖于系统的。

os.wait()

等待一个subprocess的完成,返回一个包含它的pid和退出状态指示的元组:一个16位的数字,其低字节是杀死该进程的信号编号,高字节是退出状态(如果信号数字为零); 如果生成核心文件,则设置低字节的高位。

 Availability: Unix 

“在Unix上,返回值是以wait()指定的格式编码的进程的退出状态。注意,POSIX没有指定C system()函数的返回值的含义,所以返回值Python函数是依赖于系统的。“

http://docs.python.org/library/os.html#os.system

没有错误,所以退出码是零

os.system()返回一些unix输出,而不是命令输出。 所以,如果没有错误,退出代码写为0。