【问题标题】:Python returns "wrong" exit codePython 返回“错误”的退出代码
【发布时间】: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


【解决方案1】:

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

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

【讨论】:

  • 非常感谢,这确实是一个 scipy 问题, import scipy.weave 确实解决了它(但这是一个非常难看的解决方法)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-11-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多