Можно ли узнать, находитесь ли вы в ipython или нет?

то есть вы можете сделать что-то вроде:

if we_are_in_ipython:
    do_some_ipython_specific_stuff()

normal_python_stuff()

Я предполагаю, что то, что я пытаюсь сделать, очень слабо соответствует строкам #if DEBUG в C # (т. Е. Используя ipython в качестве инструмента отладки и python командной строки для запуска кода без отладки).


person tdc    schedule 01.02.2012    source источник
comment
Разве IPython не предназначен в основном для интерактивного использования? Тогда вы, вероятно, знаете, что используете его.   -  person    schedule 01.02.2012
comment
Похоже на дубликат stackoverflow.com/q/5376837/407651.   -  person mzjn    schedule 01.02.2012
comment
Хорошо, может быть, конкретный пример поможет. Если я использую ipython, я помещаю строку from IPython.Debugger import Tracer; debug_here = Tracer() в начало файла, а затем debug_here() операторы по всему файлу. Однако первая строка генерирует ошибку из командной строки (AttributeError: 'function' object has no attribute 'colors'), и, кроме того, я бы не хотел, чтобы операторы debug_here() вызывались в любом случае.   -  person tdc    schedule 01.02.2012
comment
Дубликат stackoverflow.com/questions/5376837/   -  person atp    schedule 01.02.2012
comment
@user647772 user647772 Если вы хотите написать библиотеку, поддерживающую дополнительные функции в IPython/Jupyter, вам нужен способ отключить это.   -  person Kyle Kelley    schedule 19.10.2016


Ответы (3)


Проверьте переменную __IPYTHON__:

def is_ipython():
    try:
        __IPYTHON__ 
        return True
    except: 
        return False
person avasal    schedule 01.02.2012
comment
Что, если у меня есть __IPYTHON__ в качестве переменной - person Jakob Bowyer; 01.02.2012
comment
Python использует __name__ со знаками подчеркивания в начале и конце для специальных системных функций с предопределенным поведением. Я чувствую, что это была бы плохая номенклатура со стороны программистов. - person avasal; 01.02.2012

Как объяснено в дубликате, вы можете использовать метод try/except или

if '__IP' in globals():
    # stuff for ipython
    pass

Или проверьте встроенную функцию __IPYTHON__:

import __builtin__
if hasattr(__builtin__, '__IPYTHON__'):
    # stuff for ipython
    pass
person tito    schedule 01.02.2012

да.

if 'get_ipython' in dir():
    """
       when ipython is fired lot of variables like _oh, etc are used.
       There are so many ways to find current python interpreter is ipython.
       get_ipython is easiest is most appealing for readers to understand.
    """
    do_some_thing_
else:
    don_sonething_else
person Kracekumar    schedule 01.02.2012
comment
Я был бы рад узнать, почему кто-то -1 мой ответ. - person Kracekumar; 01.02.2012