在Python脚本中检查是否为交互式shell
我需要判断调用我这个Python脚本的命令行界面(也就是shell)是否处于交互模式。如果它是在交互模式下,程序就应该把输出通过less(1)这个工具来显示,方便阅读。如果不是交互模式,就直接把输出打印到标准输出(stdout),这样可以让输出被重定向到打印机、文件或者其他的工具。
在一个shell脚本中,我会检查提示符变量$PS1是否被定义,或者在$-这个变量中查找是否有-i这个选项。
那么,在Python中,检测是否处于交互模式的最佳方法是什么呢?
5 个回答
-4
如果你已经在使用matplotlib这个库,或者你不介意添加一个新的库,你可以直接调用 matplotlib.is_interactive() 这个函数。
2
从这个链接你可以了解到,检查标准输入(stdin)是否连接到一个终端(tty)的方法是一样的。你可以使用os.isatty()这个函数来实现,下面是一个例子:
>>> os.isatty(0)
True
注意:根据同一个链接,当你通过ssh远程调用命令时,这个方法会失败。解决办法是检查标准输入是否连接到一个管道。
45
这通常效果还不错
import os, sys
if os.isatty(sys.stdout.fileno()):
...