具有多个papermill命令的Bash脚本不会因笔记本错误而失败

时间:2019-04-02 15:24:34

标签: python bash jupyter-notebook jupyter papermill

我有一个refresh_data.sh文件,其中包含多个造纸厂命令,例如:

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"

如果在运行第一个笔记本时出现错误,该过程将继续执行第二个笔记本。

换句话说,一个笔记本中的错误不会“破坏”整个脚本。

据我所记得,在普通的python脚本中,如果bash脚本中的命令之一出错,则会中断整个脚本的执行。

在这种情况下,bash脚本的标准行为是什么?我可以更改它以便它在出现错误时立即停止吗?

1 个答案:

答案 0 :(得分:2)

如果您的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