2

我的目标是通过一个小的 *.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 正在截断我的退出代码......

评论:

  • 上面的代码不在try里面,除了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(没有 import scipy.interpolate 它将是 42,但 scipy 不是唯一产生此问题的模块

4

1 回答 1

1

这是scipy模块中的一个已知错误。请参阅问题“ import scipy.sparse.sparsetools 导致一致的退出代码 0 ”。

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

于 2013-01-16T09:37:19.183 回答