我的目标是通过一个小的 *.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 不是唯一产生此问题的模块)