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

w7t8yxp5  于 2023-01-01  发布在  Python
关注(0)|答案(6)|浏览(2045)

我发现了这个:

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

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

wrrgggsh

wrrgggsh1#

os.system的返回值取决于操作系统。
在Unix上,返回值是一个16位数,包含两条不同的信息。
一个16位数字,其低位字节是终止进程的信号编号,高位字节是退出状态(如果信号编号为零)
因此,如果信号编号(低位字节)为0,理论上,将结果移位8位(result >> 8)以获得错误代码是安全的,函数os.WEXITSTATUS正是这样做的,如果错误代码为0,通常意味着进程退出时没有错误。
在Windows上,文档指定os.system的返回值依赖于shell。如果shell是cmd.exe(默认值),则该值是进程的返回代码。同样,0表示没有错误。
对于其他错误代码:

avwztpqn

avwztpqn2#

os.system('command')返回一个16位数,左起前8位(lsb)表示操作系统关闭命令的信号,后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程序设置为command = 'python command.py'

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

在c或c++程序中,您可以从任何函数#使用return from main()或exit(n)
注意-这适用于unix
在Unix上,返回值是进程的退出状态,用wait()指定的格式编码,注意POSIX没有指定C system()函数返回值的含义,所以Python函数的返回值是系统相关的。
操作等待()
等待子进程完成,并返回包含其pid和退出状态指示的元组:一个16位数,其低位字节是终止进程的信号号,高位字节是退出状态(如果信号号为零);如果产生核心文件,则设置低字节的高位。

Availability: Unix

wfauudbj

wfauudbj3#

你可能想用

return_value = os.popen('ls').read()

os.system只返回错误值。
os.popensubprocess.Popen函数的一个更简洁的 Package 器,如python源代码中所示。

e3bfsja2

e3bfsja24#

在Unix上,返回值是以wait()指定格式编码的进程退出状态。请注意,POSIX没有指定C system()函数返回值的含义,因此Python函数的返回值取决于系统。
http://docs.python.org/library/os.html#os.system
没有错误,因此退出代码为零

im9ewurl

im9ewurl5#

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

dgsult0t

dgsult0t6#

这段代码检查系统上是否存在该命令。它使用了一个shell内置函数command来实现这个目的。还有一个内置函数hash,在检查了它的执行速度后,我确定command更快:
if os.system("command -v command_name_here") == 0: ...

相关问题