想象一下,这两组“条件”中正在运行一个脚本:
sudo crontab
./my-script.py
我想要实现的是自动检测“调试模式”,而无需为脚本指定参数(例如--debug
)。
是否有关于如何做到这一点的约定?是否有一个变量可以告诉我脚本所有者是谁?脚本是否在stdout
处有控制台?运行ps | grep
以确定?
感谢您的时间。
答案 0 :(得分:32)
由于sys.stdin
在调试模式下为TTY,因此您可以使用os.isatty()函数:
import sys, os
if os.isatty(sys.stdin.fileno()):
# Debug mode.
pass
else:
# Cron mode.
pass
答案 1 :(得分:5)
您可以将环境变量添加到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
答案 2 :(得分:3)
使用只有cron才能使用的命令行选项。
或者是一个符号链接,在cron调用时为脚本指定一个不同的名称。然后,您可以使用sys.argv[0]
来区分调用脚本的两种方法。