我发现了这个:
>>> import os >>> os.system('ls') file.txt README 0
os.system()的返回值是多少? 为什么我得到0?
os.system()
”在 Unix 上,返回值是退出值 中编码的进程的状态 为 wait ()指定的格式 POSIX 没有指定 C 系统的返回值() 函数的返回值,因此 Python 函数依赖于系统。”
Http://docs.python.org/library/os.html#os.system
没有错误,所以退出代码为零
os.system的返回值依赖于操作系统。
os.system
在 Unix 上,返回值是一个16位的数字,包含两个不同的信息:
一个16位的数字,其低字节是终止进程的信号号,其高字节是退出状态(如果信号号为零)
因此,如果信号数(低字节)为0,理论上,将结果移动8位(result >> 8)以获得错误代码是安全的。函数 os.WEXITSTATUS正是这样做的。如果错误代码为0,通常意味着进程退出时没有错误。
result >> 8
os.WEXITSTATUS
在 Windows 上,文档指定 os.system的返回值依赖于 shell。如果 shell 是 cmd.exe(默认值) ,则该值是进程的返回代码。同样,0表示没有错误。
cmd.exe
对于其他错误代码:
System ()返回一些 unix 输出,而不是命令输出。因此,如果没有错误,那么退出代码写成0。
os.system('command')返回一个16位的数字,从左边开始的8位表示关闭命令所使用的信号,接下来的8位表示返回命令代码。
os.system('command')
00000000 00000000 exit code signal num
示例1-代码1的命令 exit
os.system('command') #it returns 256 256 in 16 bits - 00000001 00000000 Exit code is 00000001 which means 1
示例2-代码3的命令 exit
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 程序设置为 command = ‘ python command.py’
import sys sys.exit(n) # here n would be exit code
对于 c 或 c + + 程序,您可以使用 main ()的 return 或者从任何函数 # 退出(n)
注意-这适用于 unix
中编码的进程的退出状态 为 wait ()指定的格式。请注意,POSIX 没有指定 函数的返回值的含义,所以返回 Python 函数的值是依赖于系统的。 Os. 等等 等待子进程完成,并返回一个元组,其中包含其 pid 和退出状态指示: 一个16位数字,其 低字节是终止进程的信号号,其高 Byte 是退出状态(如果信号号为零) ; 高位 如果生成核心文件,则设置低字节的。 Availability: Unix
中编码的进程的退出状态 为 wait ()指定的格式。请注意,POSIX 没有指定 函数的返回值的含义,所以返回 Python 函数的值是依赖于系统的。
Os. 等等
等待子进程完成,并返回一个元组,其中包含其 pid 和退出状态指示: 一个16位数字,其 低字节是终止进程的信号号,其高 Byte 是退出状态(如果信号号为零) ; 高位 如果生成核心文件,则设置低字节的。
Availability: Unix
.
你可能想用
return_value = os.popen('ls').read()
os.system只返回错误值。
正如在 python 源代码中看到的,os.popen是 subprocess.Popen函数的一个更简洁的包装器。
os.popen
subprocess.Popen