我遇到了这个:
>>> import os
>>> os.system('ls')
file.txt README
0
Run Code Online (Sandbox Code Playgroud)
什么是回报值os.system()
?我为什么得到0?
rub*_*bik 45
返回值os.system
取决于操作系统.
在Unix上,返回值是一个16位数字,包含两条不同的信息.从文档:
一个16位数字,其低字节是杀死进程的信号编号,其高字节是退出状态(如果信号编号为零)
因此,如果信号编号(低字节)为0,理论上可以安全地将结果移位8位(result >> 8
)以获得错误代码.该功能os.WEXITSTATUS
正是如此.如果错误代码为0,则通常意味着进程退出时没有错误.
在Windows上,文档指定返回值os.system
是依赖于shell的.如果shell是cmd.exe
(默认值),则该值是进程的返回码.同样,0意味着没有错误.
对于其他错误代码:
Alo*_*kur 25
os.system('command')
返回一个16位的数字,左边的前8位(lsb)讨论os用来关闭命令的信号,接下来的8位讨论返回命令的代码.
00000000 00000000
exit code signal num
Run Code Online (Sandbox Code Playgroud)
示例1 - 命令退出,代码为1
os.system('command') #it returns 256
256 in 16 bits - 00000001 00000000
Exit code is 00000001 which means 1
Run Code Online (Sandbox Code Playgroud)
示例2 - 使用代码3退出命令
os.system('command') # it returns 768
768 in 16 bits - 00000011 00000000
Exit code is 00000011 which means 3
Run Code Online (Sandbox Code Playgroud)
现在尝试使用信号 - 示例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
Run Code Online (Sandbox Code Playgroud)
你可以有一个python程序as command ='python command.py'
import sys
sys.exit(n) # here n would be exit code
Run Code Online (Sandbox Code Playgroud)
在c或c ++程序的情况下,您可以使用从main()返回或从任何函数退出(n)#
注 - 这适用于unix
在Unix上,返回值是以wait()指定的格式编码的进程的退出状态.请注意,POSIX未指定C system()函数的返回值的含义,因此Python函数的返回值取决于系统.
os.wait()
等待子进程完成,并返回一个包含其pid和退出状态指示的元组:一个16位数字,其低字节是杀死进程的信号编号,其高字节是退出状态(如果是信号)数字为零); 如果生成核心文件,则设置低字节的高位.
Run Code Online (Sandbox Code Playgroud)Availability: Unix
.
Cez*_*Cez 12
"在Unix上,返回值是以wait()指定的格式编码的进程的退出状态.注意,POSIX没有指定C system()函数返回值的含义,所以返回值为Python函数依赖于系统."
http://docs.python.org/library/os.html#os.system
没有错误,因此退出代码为零
use*_*273 10
你可能想用
return_value = os.popen('ls').read()
Run Code Online (Sandbox Code Playgroud)
反而。os.system
只返回错误值。
这os.popen
是一个更简洁的subprocess.Popen
函数包装器,如在 python 源代码中所见。