检测是否从控制台或crontab运行python脚本

时间:2010-11-18 09:01:51

标签: python bash environment-variables crontab

想象一下,这两组“条件”中正在运行一个脚本:

  1. 实时操作,在sudo crontab
  2. 中设置
  3. debug,当我从控制台./my-script.py
  4. 运行它时

    我想要实现的是自动检测“调试模式”,而无需为脚本指定参数(例如--debug)。

    是否有关于如何做到这一点的约定?是否有一个变量可以告诉我脚本所有者是谁?脚本是否在stdout处有控制台?运行ps | grep以确定?

    感谢您的时间。

3 个答案:

答案 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]来区分调用脚本的两种方法。