32位python的bug:os.system返回码一直为0
2016年9月26日 20:33
32位python在windows上调用命令行(os.system或subprocess.Popen)。执行后,如果返回码太大,python取得的返回值也是0。此时无法判断执行成功还是失败,这个是32位python的bug。
以时间同步命令w32tm位例子
在cmd上执行
C:\WINDOWS\system32>w32tm /resync 发生下列错误: 服务尚未启动。 (0x80070426) C:\WINDOWS\system32>echo %errorlevel% -2147023834
在64位python上执行
>>> os.system("w32tm /resync") 发生下列错误: 服务尚未启动。 (0x80070426) -2147023834
在32位python上执行
>>> os.system("w32tm /resync") 发生下列错误: 服务尚未启动。 (0x80070426) 0
注意:此时命令执行错误的返回码也是0。
通常成功返回码才是0,这里执行错误,返回码却是也0。当要判断执行成功还失败时,这里便是个坑。
- os.system文档
https://docs.python.org/2/library/os.html