gpt4 book ai didi

linux - 我的 jython 程序无法检测到我的 shell 脚本的错误

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:26:41 34 4
gpt4 key购买 nike

我成功地创建了一个包含 slipt 文件的脚本,并且我成功地通过 jython 过程调用了这个脚本,

这是我的 Jython 过程:

import os    

cmd = "<%=odiRef.getSchemaName("script_path","D")%>/split_ncl.sh <%=snpRef.getSchemaName("data_in","D")%>/<%=odiRef.getOption("REP_FILE")%> <%=snpRef.getOption("FILENAME")%>"

retcode = os.system(cmd)
if retcode > 1 :
raise "Fatal ListError (%d)" % retcode, "Erreur de split"

这是我的脚本 shell split_ncl.sh :

exec > Log/errors.log                                                                      
exec 2>&1

data_in=$1
fichier=$2

cd $data_in

#Purge des fichiers

rm -f Split/INIT_ENC.dat
rm -f Split/INIT_ELP.dat


grep -P "^..........ENC" fichier ><!> Split/INIT_ENC.dat
grep -P "^..........ELP" $fichier >> Split/INIT_ELP.dat

一切正常。我添加 exec > Log/errors.logexec 2>&1 将我脚本的所有错误重定向到 errors.log

当我在 UNIX 环境中执行脚本时,它运行良好,它可以记录错误,但是当我使用 ODI 并像我所做的那样通过 Jython 过程调用该脚本时,它无法检测到我的 shell 脚本的错误,例如,如果我将 fichier 替换为 $fichier(缺少 $),它不正确并且无法检测到错误。我该如何解决这个问题!

最佳答案

你应该使用 Python 的 subprocess 库而不是 os。

os.system() 发送指令,返回成功信息。假设它是异步的,它不等待进程完成。它只会触发该过程。

subprocess.call() 发送命令,等待进程完成然后返回进程的返回码。

因此,如果您将代码更改为:

retcode = subprocess.call(cmd) 
if retcode > 1 :
raise "Fatal ListError (%d)" % retcode, "Erreur de split"

还有一件事,如果您 try catch 错误,请将您的条件语句更改为 retcode != 0,因为错误的进程可以返回 0 以外的任何值。

更多信息:https://docs.python.org/2/library/subprocess.html#replacing-os-system

关于linux - 我的 jython 程序无法检测到我的 shell 脚本的错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33755602/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com