python - 带有多个 papermill 命令的 Bash 脚本不会因笔记本错误而失败
问题描述
我有一个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"
如果我在运行第一个笔记本时遇到错误,该进程将继续执行第二个。
换句话说,其中一个笔记本中的错误不会“破坏”整个脚本。
据我记得,如果 bash 脚本中的某个命令出现错误,则使用普通的 python 脚本会中断整个脚本的执行。
在这种情况下,bash 脚本的标准行为是什么?我可以更改它以便在出现错误时立即停止吗?
解决方案
如果您的 bash 脚本配置为:set -e
如果命令出错,它将失败:
#!/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
推荐阅读
- javascript - Javascript 中是否存在类似于 Java 中的 Pair 对象的等效对象?
- perl - Perl 哈希函数管理不善
- wordpress - 我想在 Wordpress 中显示类别名称和所有相关帖子
- linux - 如何使用shell脚本附加一些具有变量名的行
- javascript - 通过 Ajax POST 将两个 JSON 发送到 Flask python
- java - 正则表达式在我的代码中不起作用,但在网上它起作用了
- sequelize.js - Sequelize v5:在 Create 的 then 中的 FindAll 不检索创建的行
- types - 在 GraphQL 类型定义中创建条件属性
- r - 将大型 .txt 文件 (7.7 GB) 读入 R 的打包建议
- python - Python自动登录