我有一个shell脚本,我在运行提供的命令的gitlab CI上使用。问题是,如果命令失败,它不显示错误,只是说def run_command(command,command2):
p1 = subprocess.Popen(command,stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
p2 = subprocess.Popen(command2,stdin=p1.stdout,stdout=subprocess.PIPE)
return iter(p2.stdout.readline,'')
command = 'mosquitto_sub -u example -P example -t ITT/# -v'.split()
command2 = 'grep Online'.split()
#subprocess.getoutput(command)
for line in run_command(command,command2):
print(line)
。我在本地尝试了脚本,它能够输出失败的命令,有没有办法在退出作业之前以某种方式强制它通过我的脚本显示错误?
我的剧本的特定部分
ERROR: Job failed: exit code 1
答案 0 :(得分:1)
捕获在每个 shell中运行的错误的一种方法是将两个命令与逻辑OR ||
组合在一起。
从子shell获取错误:
output="$( (cd "$FOLDER"; eval "$@") 2>&1 )" || errorcode="$?"
如果失败,将保存上一个命令的错误代码。
如果重要命令失败,请使用自己的错误代码退出
output="$( (cd "$FOLDER"; eval "$@") 2>&1 )" || exit 12
对于更复杂的事情,可以定义一个在OR之后调用的函数。
handle_error() {
# do stuff
}
output="$( (cd "$FOLDER"; eval "$@") 2>&1 )" || handle_error