检测 Python 脚本是从控制台运行还是由 crontab 执行
想象一下,有一个脚本在这两种“环境”下运行:
- 正常运行,设置在
sudo crontab
中 - 调试模式,当我从控制台运行它时,使用
./my-script.py
我想要实现的是自动检测“调试模式”,而不需要我手动指定一个参数(比如 --debug
)给脚本。
有没有什么约定可以做到这一点?有没有什么变量可以告诉我脚本的拥有者是谁?脚本是否在 stdout
上有控制台?要不要运行 ps | grep
来判断一下?
谢谢你的时间。
3 个回答
4
使用一个只有定时任务(cron)会用到的命令行选项。
或者可以创建一个符号链接,让脚本在被定时任务调用时有一个不同的名字。这样你就可以用 sys.argv[0]
来区分这两种调用脚本的方式。
9
你可以在crontab的设置里添加一个环境变量,然后在你的Python应用程序中检查这个环境变量是否被设置。
crontab的配置文件:
CRONTAB=true
# run five minutes after midnight, every day
5 0 * * * /path/to/your/pythonscript
Python代码:
import os
if os.getenv('CRONTAB') == 'true':
# do your crontab things
else:
# do your debug things
38
因为在调试模式下,sys.stdin
会变成一个 TTY(终端设备),所以你可以使用 os.isatty() 这个函数来检查。
import sys, os
if os.isatty(sys.stdin.fileno()):
# Debug mode.
pass
else:
# Cron mode.
pass