Skip to main content
 首页 » 编程设计

Python 返回 "wrong"退出代码

2025年05月04日9artech

我的目标是通过一个小的 *.bat 脚本执行一个 python 脚本(执行一些单元测试)。 *.bat 脚本还应该接收 python 脚本的退出状态。但是似乎没有正确传输*.py文件的退出状态。

我的testit.py:

execute_some_unittests() 
   ... 
   if success: 
       sys.exit(1)  
   else: 
       sys.exit(2) 
   # End of the script 

我的测试.bat:

python C:\testit.py 
echo %ERRORLEVEL% 

根据我在 execute_some_unittests() 中运行的单元测试,运行 test.bat 结果为 1、2 或 0!!! 我绝对确定代码到达 sys.exit(1 )(因为我记录了所有内容)但是(取决于测试的单元测试)它出错了。

我的猜测是,执行单元测试设置了一些标志,这些标志将与退出代码合并并生成一个类似 unix 的 16 位退出代码(而不是 8 位),并且 cmd 正在截断我的退出代码......

备注:

  • 上面的代码不在try中,except block
  • 用 os._exit(1) 替换 sys.exit(1) 没有帮助

我在这个问题上工作了 2 天,对于每一个想法我都会感激...

我使用的是 Win7,python 2.6,模块:unittest,doctest,sys,os

更新:被要求提供完整的工作示例:

测试.py:

import unittest 
from scipy.interpolate import interp1d 
class Test(unittest.TestCase): 
    def test_basic(self): 
        self.failUnlessEqual(1, 1) 
if __name__ == '__main__': 
    suite = unittest.TestLoader().loadTestsFromTestCase(Test) 
    unittest.TextTestRunner(verbosity=2).run(suite) 
    import sys 
    sys.exit(42) 

测试.bat:

python C:\test.py 
echo %ERRORLEVEL% 

结果:错误级别 0(没有导入 scipy.interpolate 它将是 42, 但 scipy 不是唯一产生此问题的模块 )

请您参考如下方法:

这是 scipy 模块中的一个已知错误。请参阅问题“import scipy.sparse.sparsetools causes consistent exit code 0”。

这个问题似乎仍然悬而未决...