我该使用什么代码检查脚本是否在IDLE中运行?

13 投票
5 回答
6659 浏览
提问于 2025-04-16 02:28

就像标题说的那样。我想写一个脚本,它的行为会根据是在控制台窗口运行还是在IDLE中运行而有所不同。有没有什么对象是只有在IDLE中运行时才存在的,我可以用来检查?或者有什么环境变量吗?

我在Windows上使用的是Python 2.6.5和2.7。

编辑:

到目前为止给出的答案都有效。但我想找一个官方的方法,或者一个看起来不像是临时解决方案的方法。如果有人能想到这样的办法,我会把它当作答案接受。否则,过几天我会接受最早的答案。

5 个回答

5

我建议把所有代码放在一个函数里(Python 3):

def RunningIntoPythonIDLE():

    import idlelib.PyShell

    def frames(frame = sys._getframe()):
        _frame = frame
        while _frame :
            yield _frame
            _frame = _frame.f_back

    return idlelib.PyShell.main.__code__ in [frame.f_code for frame in frames()]

这样 tkinter 应用程序就可以进行检查了:

if not RunningIntoPythonIDLE():
    root.mainloop()
15

我更倾向于这样做:

import sys
print('Running IDLE' if 'idlelib.run' in sys.modules else 'Out of IDLE')
6

谷歌给我找到了一个2003年的论坛帖子,里面提到了一些内容。使用Python 3.1(适用于win32)和它自带的IDLE版本时,在命令行中执行len(sys.modules)的结果是47,而在IDLE的界面中却是122。

那么,为什么你需要关注这个呢?当用IDLE运行Tkinter代码时,会遇到一些麻烦(因为IDLE本身也用到了tkinter),但除此之外,我觉得你可以放心,不用太在意这个问题。

撰写回答