2013-01-16 223 views
2

我的目標是通過一個小* .bat腳本執行一個python腳本(它執行一些unittests)。 * .bat腳本還應該接收python腳本的退出狀態。但似乎沒有正確傳輸* .py文件的退出狀態。Python返回「錯誤的」退出代碼

我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% 

Depanding上我在execute_some_unittests()運行單元測試,運行結果的test.bat在1,2 或0!我絕對確信代碼到達sys.exit(1)(因爲我記錄了所有內容),但仍然(取決於測試的單元測試)它出錯了。

我的猜測是執行unittests會設置一些標誌,這些標誌將與退出代碼合併並生成一個類似16位退出代碼的unix(而不是8),並且cmd很快就會截斷我的退出代碼。

備註:

  • 以上的代碼不是一試內,除了塊
  • 更換sys.exit(1)用os._exit(1)沒有幫助

由於2-天,我正在處理這個問題,將是gratefull的每一個想法......

我使用Win7的,Python 2.6中,模塊:單元測試,文檔測試,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(進口內部消除scipy.interpolate這將是42,但 是SciPy的不產生此問題 唯一模塊)

+1

你是否使用'unittest'模塊? –

+0

你能提供一個小的完整腳本來重現這個嗎?我懷疑你沒有向我們展示的代碼有問題。 –

+0

感謝您的快速響應,看到我的更新 –

回答