因爲聲譽,我不能評論,但你絕對可以使用從nephim註釋代碼。
1)只是把所述第一的nephim的代碼在test.py (chmod 700 test.py
)
2)本KSH腳本運行test.py:
#!/usr/bin/ksh
./test.py
exit $?
3)這是例如由命令行
> ./test.ksh
> echo $?
5
PS:你應該chmod 700
test.ksh以及。
P.P.S:可能我誤解了你的問題。 如果你的python腳本在到達結尾之前退出(所以它不執行sys.exit(codeRet)命令),在這種情況下,你應該使用try..execpt結構。
try :
<some code>
except <Error to Catch>:
sys.exit(codeRet)
按如下說明:Python: about catching ANY exception你甚至可以捕獲所有異常的:
try:
do_something()
except:
print "Caught it!"
但作爲解釋說: 「你可以,但你不應該」
更新: @ AlexKinman 我認爲你的python有一些問題......正如tripleee提到的,它可能是一些包裝? 可不可以給的which python2.7
這裏我的測試返回:
$#貓wrong_test.ksh
#!/bin/ksh
log_file=log.txt
python -c 'raise Exception("foo")' >> ${log_file} 2>&1
exit_code=$?
if [ ${exit_code} -ne 0 ]
then
echo "Python script failed" >> ${log_file}
fi
$#貓的日誌。TXT 回溯(最近通話最後一個): 文件 「」,1號線,在 例外:富 Python腳本未能
$#貓good_test.ksh
#!/bin/ksh
log_file=log1.txt
python -c 'print "Hello"' >> ${log_file} 2>&1
exit_code=$?
if [ ${exit_code} -ne 0 ]
then
echo "Python script failed" >> ${log_file}
fi
$# cat log1.txt
你好
在shell腳本中你可以做'echo「Returncode = $?」' –
你可以顯示你的shell腳本嗎?如果shell腳本的最後一個命令運行Python腳本,那麼shell應該退出,出錯狀態與Python腳本相同。 (如果你在Python腳本的調用之後有任何東西,例如你的shell中有一個日誌語句,那麼它可能是該行的退出狀態被返回)。 –
@CharlesDuffy我添加了shell腳本的詳細信息。它應該捕獲.py腳本的退出狀態,但我似乎忽略了某些內容。 –