【发布时间】:2013-01-16 08:58:17
【问题描述】:
我的目标是通过一个小的 *.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
更新:被要求提供完整的工作示例:
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(如果没有 import scipy.interpolate,它将是 42,但 scipy 不是唯一产生此问题的模块)
【问题讨论】:
-
你在使用
unittest模块吗? -
你能提供一个完整的小脚本来重现这个吗?我怀疑您没有向我们展示的代码有问题。
-
感谢您的快速响应,请参阅我的更新
标签: python windows-7 batch-file python-2.6 exit-code