如何检查我是否在Python中运行shell(有一个终端)?

时间:2013-02-27 20:13:46

标签: python python-2.6

我有一个通常用完cron的Python脚本。有时,我想在(Unix)shell中自己运行它,如果是这样,让它将其输出写入终端而不是写入日志文件。

确定脚本是否已用完cron或交互式shell中的pythonic方法是什么(我的意思是bash,ksh等,而不是python shell)?

我可以检查是否存在TERM环境变量?这很有道理,但似乎看似简单......

可以以某种方式使用os.isatty吗?

如果它有所作为,我正在使用Python 2.6。谢谢!

2 个答案:

答案 0 :(得分:3)

您可以检查您的标准输出是否已附加到终端:

import sys
sys.stdout.isatty()

你可以用os.isatty来做,但这需要一个文件描述符,这不那么简单:

import os
os.isatty(sys.stdout.fileno())

答案 1 :(得分:2)

如果你真的需要检查一下,Pavel Anossov的答案就是这样做的方式,它和你最初的猜测几乎相同。

但你真的需要检查一下吗?为什么不写一个写入stdout和/或stderr的Python脚本,而你的cron作业只能重定向到日志文件?

或者更好的是,使用logging模块并让它写入syslog或其他任何合适的模块,如果有,也写入终端?