我发现了这个:
>>> import os >>> os.system('ls') file.txt README 0
os.system()的返回值是什么?为什么我得到0?
os.system()
wrrgggsh1#
os.system的返回值取决于操作系统。在Unix上,返回值是一个16位数,包含两条不同的信息。一个16位数字,其低位字节是终止进程的信号编号,高位字节是退出状态(如果信号编号为零)因此,如果信号编号(低位字节)为0,理论上,将结果移位8位(result >> 8)以获得错误代码是安全的,函数os.WEXITSTATUS正是这样做的,如果错误代码为0,通常意味着进程退出时没有错误。在Windows上,文档指定os.system的返回值依赖于shell。如果shell是cmd.exe(默认值),则该值是进程的返回代码。同样,0表示没有错误。对于其他错误代码:
os.system
result >> 8
os.WEXITSTATUS
cmd.exe
avwztpqn2#
os.system('command')返回一个16位数,左起前8位(lsb)表示操作系统关闭命令的信号,后8位表示命令的返回码。
os.system('command')
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
。
wfauudbj3#
你可能想用
return_value = os.popen('ls').read()
而os.system只返回错误值。os.popen是subprocess.Popen函数的一个更简洁的 Package 器,如python源代码中所示。
os.popen
subprocess.Popen
e3bfsja24#
在Unix上,返回值是以wait()指定格式编码的进程退出状态。请注意,POSIX没有指定C system()函数返回值的含义,因此Python函数的返回值取决于系统。http://docs.python.org/library/os.html#os.system没有错误,因此退出代码为零
im9ewurl5#
system()返回一些unix输出,而不是命令输出。因此,如果没有错误,则退出代码写为0。
dgsult0t6#
这段代码检查系统上是否存在该命令。它使用了一个shell内置函数command来实现这个目的。还有一个内置函数hash,在检查了它的执行速度后,我确定command更快:if os.system("command -v command_name_here") == 0: ...
command
hash
if os.system("command -v command_name_here") == 0: ...
6条答案
按热度按时间wrrgggsh1#
os.system
的返回值取决于操作系统。在Unix上,返回值是一个16位数,包含两条不同的信息。
一个16位数字,其低位字节是终止进程的信号编号,高位字节是退出状态(如果信号编号为零)
因此,如果信号编号(低位字节)为0,理论上,将结果移位8位(
result >> 8
)以获得错误代码是安全的,函数os.WEXITSTATUS
正是这样做的,如果错误代码为0,通常意味着进程退出时没有错误。在Windows上,文档指定
os.system
的返回值依赖于shell。如果shell是cmd.exe
(默认值),则该值是进程的返回代码。同样,0表示没有错误。对于其他错误代码:
avwztpqn2#
os.system('command')
返回一个16位数,左起前8位(lsb)表示操作系统关闭命令的信号,后8位表示命令的返回码。示例1 -使用代码1退出命令
示例2 -使用代码3退出命令
现在尝试使用信号-示例3 -编写一个长时间休眠的程序,将其用作os.system()中的命令,然后通过kill -15或kill -9杀死它
您可以将python程序设置为command = 'python command.py'
在c或c++程序中,您可以从任何函数#使用return from main()或exit(n)
注意-这适用于unix
在Unix上,返回值是进程的退出状态,用wait()指定的格式编码,注意POSIX没有指定C system()函数返回值的含义,所以Python函数的返回值是系统相关的。
操作等待()
等待子进程完成,并返回包含其pid和退出状态指示的元组:一个16位数,其低位字节是终止进程的信号号,高位字节是退出状态(如果信号号为零);如果产生核心文件,则设置低字节的高位。
。
wfauudbj3#
你可能想用
而
os.system
只返回错误值。os.popen
是subprocess.Popen
函数的一个更简洁的 Package 器,如python源代码中所示。e3bfsja24#
在Unix上,返回值是以wait()指定格式编码的进程退出状态。请注意,POSIX没有指定C system()函数返回值的含义,因此Python函数的返回值取决于系统。
http://docs.python.org/library/os.html#os.system
没有错误,因此退出代码为零
im9ewurl5#
system()返回一些unix输出,而不是命令输出。因此,如果没有错误,则退出代码写为0。
dgsult0t6#
这段代码检查系统上是否存在该命令。它使用了一个shell内置函数
command
来实现这个目的。还有一个内置函数hash
,在检查了它的执行速度后,我确定command
更快:if os.system("command -v command_name_here") == 0: ...