Какой код я могу использовать, чтобы проверить, работает ли Python в IDLE? - PullRequest
11 голосов
/ 07 августа 2010

Так же, как говорится в названии. Я хочу написать сценарий, который ведет себя по-разному в зависимости от того, работает ли он в окне консоли или в режиме IDLE. Есть ли объект, который существует только при запуске в режиме бездействия, который я могу проверить? Переменная среды?

Я использую Python 2.6.5 и 2.7 в Windows.

Edit:

Ответы, данные до сих пор, работают. Но я ищу официальный способ сделать это или тот, который не выглядит как взломать. Если кто-то придумает, я приму это как ответ. Иначе через несколько дней я приму самый ранний ответ. Спасибо всем!

Ответы [ 5 ]

11 голосов
/ 18 сентября 2011

Я бы предпочел сделать:

import sys
print('Running IDLE' if 'idlelib.run' in sys.modules else 'Out of IDLE')
5 голосов
/ 07 июля 2011

Я предлагаю упаковать весь код в одну функцию (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()
5 голосов
/ 07 августа 2010

Google нашел меня это сообщение на форуме от 2003 года. С Python 3.1 (для win32) и версией IDLE, с которой он поставляется, len (sys.modules) os 47 в командной строке, но 122 вОболочка IDLE.

Но зачем тебе все равно?Код Tkinter имеет некоторые неудобства при запуске с IDLE (так как последний использует сам tkinter), но в остальном я думаю, что я могу с уверенностью предположить, что вам не нужно заботиться.

1 голос
/ 23 июля 2017

Я немного опоздал, но поскольку IDLE заменяет стандартные потоки пользовательскими объектами ( и это задокументировано ), их можно проверить, чтобы определить, выполняется ли сценарий в IDLE:

import sys

def in_idle():
    try:
        return sys.stdin.__module__.startswith('idlelib')
    except AttributeError:
        return True
1 голос
/ 08 августа 2010

Я предлагаю получить список всех запущенных фреймов и проверить, будет ли там основной метод Idle.

def frames(frame = sys._getframe()):
    _frame = frame
    while _frame :
        yield _frame
        _frame = _frame.f_back
import idlelib.PyShell
print(idlelib.PyShell.main.func_code in [frame.f_code for frame in frames()])

Функция frames генерирует фреймы, работающие в момент ее объявления, так что вы можете проверить,холостые были здесь.

...