Python中os.system()的返回值是多少?

43 python operating-system

我遇到了这个:

>>> 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意味着没有错误.

对于其他错误代码:

  • 固体.对于语气很抱歉,我刚刚花了一段时间来解决这个问题.请注意,您可以使用`os.WEXITSTATUS(os.system(command))`来获取退出状态. (4认同)
  • @SteveBennett 谢谢,我修复了链接。为什么您认为它不符合答案?问题是“这个数字是多少”,我给出了答案。 (2认同)

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位数字,其低字节是杀死进程的信号编号,其高字节是退出状态(如果是信号)数字为零); 如果生成核心文件,则设置低字节的高位.

Availability: Unix
Run Code Online (Sandbox Code Playgroud)

.

  • 注意:您可以使用`os.WEXITSTATUS(os.system(my_call))`获取返回码.所以例如`sys.exit(os.WEXITSTATUS(os.system('exit 2')))`将以状态码2退出. (4认同)

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 源代码中所见。


sam*_*sam 6

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