我遇到了这个:
>>> import os
>>> os.system('ls')
file.txt README
0
os.system()
的返回值是多少?为什么我得到0?
原文由 user813713 发布,翻译遵循 CC BY-SA 4.0 许可协议
我遇到了这个:
>>> import os
>>> os.system('ls')
file.txt README
0
os.system()
的返回值是多少?为什么我得到0?
原文由 user813713 发布,翻译遵循 CC BY-SA 4.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 许可协议
2 回答4.9k 阅读✓ 已解决
2 回答1k 阅读✓ 已解决
3 回答1k 阅读✓ 已解决
4 回答825 阅读✓ 已解决
3 回答1.1k 阅读✓ 已解决
1 回答1.6k 阅读✓ 已解决
1 回答1.1k 阅读✓ 已解决
os.system
的返回值取决于操作系统。在 Unix 上,返回值是一个 16 位数字,其中包含两条不同的信息。从文档中:
因此,如果信号编号(低字节)为 0,理论上将结果移动 8 位 (
result >> 8
) 以获得错误代码是安全的。函数os.WEXITSTATUS
正是这样做的。如果错误代码为 0,则通常表示进程已无错退出。在 Windows 上,文档指定
os.system
的返回值依赖于 shell。如果 shell 是cmd.exe
(默认),该值是进程的返回码。同样,0 表示没有错误。对于其他错误代码: