我可以使用什么代码来检查Python是否在IDLE中运行?

KeJ*_*eJi 11 python python-idle

正如标题所说.我想编写一个行为不同的脚本,具体取决于它是在控制台窗口内运行还是在IDLE中运行.是否存在仅在IDLE中运行时才能检查的对象?环境变量?

我在Windows上使用Python 2.6.5和2.7.

编辑:

到目前为止给出的答案有效.但我正在寻找一种正式的方法,或者看起来不像黑客.如果有人想出一个,我会接受这个答案.否则,在几天之内,我会接受最早的答案.感谢大家!

Ton*_*nen 12

我更愿意这样做:

import sys
print('Running IDLE' if 'idlelib.run' in sys.modules else 'Out of IDLE')
Run Code Online (Sandbox Code Playgroud)


小智 6

谷歌在2003年发现了这个论坛帖子.使用Python 3.1(适用于win32)和它带来的IDLE版本,len(sys.modules)os 47在命令行中,但122在IDLE shell中.

但是为什么你还需要关心呢?使用IDLE运行时,Tkinter代码会有一些烦恼(因为后者使用tkinter本身),但我认为我可以安全地假设您不必关心.

  • 使用控制台,我希望能够清除屏幕,移动光标,添加颜色,使用msvcrt.getch等。其中大多数似乎在IDLE中不起作用,有些甚至会无声地失败,因此,与其让这种情况发生,我宁愿让它检查它是否在IDLE中运行。 (2认同)

小智 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()]
Run Code Online (Sandbox Code Playgroud)

所以tkinter应用程序可以检查:

if not RunningIntoPythonIDLE():
    root.mainloop()
Run Code Online (Sandbox Code Playgroud)