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) に到達することは絶対に確信していますが(すべてをログに記録しているため)、それでも(テストされるユニットテストによっては)うまくいきません。

私の推測では、単体テストを実行すると、終了コードとマージされて (8 ではなく) 16 ビットの終了コードのような UNIX が生成されるいくつかのフラグが設定され、cmd が私の終了コードを多少切り捨てていると思います...

備考:

  • 上記のコードは、ブロックを除いて、try 内にありません
  • sys.exit(1) を os._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 だけではありません)

4

1 に答える 1

1

これはscipyモジュールの既知のエラーです。問題「import scipy.sparse.sparsetools により一貫した終了コード 0 が発生する」を参照してください。

この問題はまだ未解決のようです...

于 2013-01-16T09:37:19.183 に答える