
通过 bash 包装脚本可便捷捕获 python 脚本的执行起止时间、退出状态(0 表示成功,非 0 表示失败),无需修改原脚本,也无需额外引入日志模块或依赖。
通过 bash 包装脚本可便捷捕获 python 脚本的执行起止时间、退出状态(0 表示成功,非 0 表示失败),无需修改原脚本,也无需额外引入日志模块或依赖。
在自动化运维、定时任务(如 cron)或 CI/CD 流程中,可靠地监控 Python 脚本的执行结果至关重要。最轻量、跨平台且符合 Unix 哲学的做法是:用 Bash 脚本封装 Python 执行过程,利用 shell 内置机制捕获关键指标——启动时间、结束时间、退出码(exit code)。
✅ 推荐实践:Bash 封装 + 时间与状态捕获
创建一个可复用的包装脚本 run_with_monitor.sh:
#!/bin/bash
# run_with_monitor.sh
SCRIPT_PATH="${1:-./myscript.py}"
if [[ ! -f "$SCRIPT_PATH" ]]; then
echo "Error: Script '$SCRIPT_PATH' not found."
exit 1
fi
START_TIME=$(date '+%Y-%m-%d %H:%M:%S')
echo "[INFO] Start time: $START_TIME"
# 使用 time 命令记录真实耗时,并重定向 time 输出到 stderr,避免干扰脚本 stdout
{ time python "$SCRIPT_PATH"; } 2>&1
EXIT_CODE=$?
END_TIME=$(date '+%Y-%m-%d %H:%M:%S')
echo "[INFO] End time: $END_TIME"
echo "[INFO] Exit code: $EXIT_CODE"
echo "[INFO] Status: $(if [[ $EXIT_CODE -eq 0 ]]; then echo "SUCCESS"; else echo "FAILED"; fi)"赋予执行权限并运行:
图片提示词生成器?不止如此。 马甲系统 —— 把脑海中的画面,翻译成AI能理解的专业表达。 用得越多,它越懂你:首次需要多问几句确认方向,用久了几乎一说就懂。 用得越多,它越快:缓存机制让后续对话越来越省。 RAG进化:成功案例持续入库,越跑越聪明。 输入「新手指南」查看完整功能介绍
chmod +x run_with_monitor.sh ./run_with_monitor.sh myscript.py
? 关键原理说明
- $? 是上一条命令的退出状态码:Python 程序正常结束返回 0;未捕获异常(如 raise ValueError)、调用 sys.exit(1) 或崩溃均返回非零值(通常为 1)。
- time 命令默认输出 real/user/sys 时间,其中 real 即 wall-clock 时间(实际耗时),满足“起止时间”需求;结合 date 可获得更易读的 ISO 格式时间戳。
- 不需修改原始 .py 文件——零侵入,兼容所有已有脚本。
⚠️ 注意事项
- time 是 Bash 内置命令,确保使用 #!/bin/bash(而非 #!/bin/sh)以保证兼容性;
- 若需将结果写入日志文件,可在调用时重定向:
./run_with_monitor.sh script.py >> execution.log 2>&1 - 对于需要高精度计时(毫秒级)或结构化记录(JSON/CSV)的场景,可升级为 Python 主控脚本(用 subprocess.run(..., capture_output=True)),但 Bash 方案已覆盖 90% 的运维监控需求;
- 避免在被测脚本中静默吞掉异常(如空 except:),否则可能掩盖真实失败,导致误报 Exit code: 0。
该方案简洁、健壮、无额外依赖,是生产环境中追踪 Python 脚本执行健康状况的推荐起点。
立即学习“Python免费学习笔记(深入)”;

















