如何将错误退出代码从python脚本传递给调用它的KSH脚本?

时间:2016-04-19 17:56:58

标签: python shell

我有一个由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

3 个答案:

答案 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。

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!"

但正如所解释的那样:&#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
  你好