我的目標是通過一個小* .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的不產生此問題
唯一模塊)
你是否使用'unittest'模塊? –
你能提供一個小的完整腳本來重現這個嗎?我懷疑你沒有向我們展示的代碼有問題。 –
感謝您的快速響應,看到我的更新 –