Bash 包含多个 papermill 命令的脚本不会因笔记本错误而失败
Bash script with multiple papermill commands does not fail on notebook errors
我有一个 refresh_data.sh
文件,其中包含多个 papermill 命令,例如:
papermill notebook_1.ipynb output_1.ipynb -p start "2017-12-01" -p date "2017-12-31"
papermill notebook_2.ipynb output_2.ipynb -p start "2018-01-01" -p date "2018-01-31"
如果我在 运行 第一个笔记本时出错,进程会继续执行第二个笔记本。
换句话说,其中一个笔记本中的错误不会 "break" 整个脚本。
据我所知,对于普通 python 脚本,如果 bash 脚本中的其中一个命令出现错误,它会中断整个脚本的执行。
在这种情况下,bash 脚本的标准行为是什么?能改成一出错就停止吗?
如果您的 bash 脚本配置为:set -e
如果命令出错,它将失败:
Automatic exit from bash shell script on error
#!/bin/bash
set -e
# Any subsequent(*) commands which fail will cause the shell script to exit immediately
您可以 运行 造纸厂使用:
--log-output
以获取有关笔记本故障原因的更多信息。
papermill "${INPUT_NOTEBOOK_PATH}" "${OUTPUT_NOTEBOOK_PATH}" --log-output
要捕获笔记本执行结果,您始终可以使用 $?
:
捕获任何先前命令的结果
papermill "${INPUT_NOTEBOOK_PATH}" "${OUTPUT_NOTEBOOK_PATH}" --log-output
notebook_result=$?
if [[ ${notebook_result} -eq 0 ]]; then
echo "All good"
else
echo $notebook_result
fi
我有一个 refresh_data.sh
文件,其中包含多个 papermill 命令,例如:
papermill notebook_1.ipynb output_1.ipynb -p start "2017-12-01" -p date "2017-12-31"
papermill notebook_2.ipynb output_2.ipynb -p start "2018-01-01" -p date "2018-01-31"
如果我在 运行 第一个笔记本时出错,进程会继续执行第二个笔记本。
换句话说,其中一个笔记本中的错误不会 "break" 整个脚本。
据我所知,对于普通 python 脚本,如果 bash 脚本中的其中一个命令出现错误,它会中断整个脚本的执行。
在这种情况下,bash 脚本的标准行为是什么?能改成一出错就停止吗?
如果您的 bash 脚本配置为:set -e
如果命令出错,它将失败:
Automatic exit from bash shell script on error
#!/bin/bash
set -e
# Any subsequent(*) commands which fail will cause the shell script to exit immediately
您可以 运行 造纸厂使用:
--log-output
以获取有关笔记本故障原因的更多信息。
papermill "${INPUT_NOTEBOOK_PATH}" "${OUTPUT_NOTEBOOK_PATH}" --log-output
要捕获笔记本执行结果,您始终可以使用 $?
:
papermill "${INPUT_NOTEBOOK_PATH}" "${OUTPUT_NOTEBOOK_PATH}" --log-output
notebook_result=$?
if [[ ${notebook_result} -eq 0 ]]; then
echo "All good"
else
echo $notebook_result
fi