判断Python是否在交互模式下

71 投票
7 回答
20875 浏览
提问于 2025-04-15 19:52

在一个Python脚本中,有没有办法判断解释器是否处于交互模式?这样做很有用,比如当你运行一个交互式的Python会话并导入一个模块时,可以执行稍微不同的代码(例如,关闭日志记录)。

我查过了如何判断Python是否处于-i模式,并尝试了那里的代码,但那个函数只有在Python是用-i参数启动时才返回真,而当用python命令启动交互模式且没有其他参数时,它并不会返回真。

我想要的效果是这样的:

if __name__=="__main__":
    #do stuff
elif __pythonIsInteractive__:
    #do other stuff
else:
    exit()

7 个回答

29

sys.ps1sys.ps2 这两个东西只在交互模式下有定义。

57

我对找到的所有方法进行了比较,并做了一个结果表格。看起来最好的方法是这个:

hasattr(sys, 'ps1')

在这里输入图片描述

如果有人有其他可能不同的情况,请留言,我会把它加上。

71

__main__.__file__ 在交互式解释器中是不存在的:

import __main__ as main
print hasattr(main, '__file__')

这同样适用于通过 python -c 运行的代码,但通过 python -m 运行的代码就有这个东西。

撰写回答