在Python脚本中检查是否为交互式shell

34 投票
5 回答
14897 浏览
提问于 2025-04-16 18:14

我需要判断调用我这个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()):
    ...

撰写回答