Python返回“错误的”退出代码

时间:2013-01-16 08:58:17

标签: python windows-7 batch-file python-2.6 exit-code

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

我的testit.py:

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

我的test.bat:

python C:\testit.py
echo %ERRORLEVEL%

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

我的猜测是执行单元测试是设置一些标志,这些标志将与退出代码合并,并产生一个像16位退出代码(而不是8)的unix,并且cmd对我的退出代码进行了截断... < / p>

备注:

  • 上面的代码不是在try中,除了块
  • 用os._exit(1)替换sys.exit(1)无济于事

我在这个问题上工作了2天,并且对每一个想法都感激不尽......

我正在使用Win7,python 2.6,模块:unittest,doctest,sys,os

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

test.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)

test.bat的:

python C:\test.py
echo %ERRORLEVEL%

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

1 个答案:

答案 0 :(得分:1)

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

这个问题似乎仍然存在......