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

新手上路,请多包涵

我遇到了这个:

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

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

原文由 user813713 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.1k
2 个回答

os.system 的返回值取决于操作系统。

在 Unix 上,返回值是一个 16 位数字,其中包含两条不同的信息。从文档中:

一个 16 位数字,其低字节是终止进程的信号编号,其高字节是退出状态(如果信号编号为零)

因此,如果信号编号(低字节)为 0,理论上将结果移动 8 位 ( result >> 8 ) 以获得错误代码是安全的。函数 os.WEXITSTATUS 正是这样做的。如果错误代码为 0,则通常表示进程已无错退出。

在 Windows 上,文档指定 os.system 的返回值依赖于 shell。如果 shell 是 cmd.exe (默认),该值是进程的返回码。同样,0 表示没有错误。

对于其他错误代码:

原文由 rubik 发布,翻译遵循 CC BY-SA 3.0 许可协议

os.system('command') 返回一个 16 位数字,其中左起的前 8 位(lsb)表示 os 用于关闭命令的信号,接下来的 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

.

原文由 AlokThakur 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题