我有一个由korn shell脚本调用的python脚本。如果python脚本遇到错误,korn shell脚本仍然以0退出。如何获取python脚本告诉ksh它没有正确终止?
说唱歌手的脚本如下所示:
python2.7 python_script.py ${inargument} >> ${log_file} 2>&1
exit_code=$?
if [ ${exit_code} -ne 0 ]
then
echo "Python script failed" >> ${log_file}
fi
答案 0 :(得分:4)
我不确定KSH,但这是你如何让python返回一个非零的返回值,我假设KSH可以检测并处理它。
import sys
retCode = 5
sys.exit(retCode)
或
retCode = -128
raise SystemExit(retCode)
答案 1 :(得分:0)
将整个脚本包装在try块中并在catch中将错误写入输出文件。与你的ksh相比,你可以阅读那个输出文件并做你需要做的事情。
这里有一些伪代码。
rm opFile
python yourSript.py
if opFile != blank:
process log file...
start cat runlog.m | more
答案 2 :(得分:0)
由于声誉,我无法发表评论,但您绝对可以使用nephim评论中的代码。
1)只需将nephim的第一个代码放在test.py中
(chmod 700 test.py
)
2)这个ksh脚本运行test.py:
#!/usr/bin/ksh
./test.py
exit $?
3)这是命令行的例子
> ./test.ksh
> echo $?
5
P.S。:你也应该chmod 700
test.ksh。
try :
<some code>
except <Error to Catch>:
sys.exit(codeRet)
正如这里所解释的:Python: about catching ANY exception你甚至可以捕获所有例外:
try:
do_something()
except:
print "Caught it!"
但正如所解释的那样:&#34;你可以,但你不应该&#34;
<强>更新强>
@AlexKinman
我认为你的python存在一些问题......正如tripleee所提到的,它可能是一些包装器吗?
你能否回报which python2.7
这是我的测试:
$#cat 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
$#cat log.txt Traceback(最近一次调用最后一次): 文件&#34;&#34;,第1行,in 例外:foo Python脚本失败
$#cat 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
你好