Как узнать, запускаю ли я python из Textmate / emacs? - PullRequest
0 голосов
/ 13 сентября 2010

Я использую TextMate для отладки скрипта Python, так как мне нравится возможность использовать Command-R для запуска Python из TextMate, и я узнал, что emacs предоставляет аналогичную функцию.

Мне нужно знать, запускается ли питон из командной строки или из TextMate / emacs. Как я могу это сделать?

ДОБАВЛЕНО

Я использую TextMate для кодирования / отладки Python, и это довольно полезно. Но иногда мне нужно запустить тест с помощью командной строки. Я обычно включаю режим отладки / ведения журнала с помощью TextMate и выключаю в режиме командной строки. Вот почему я задал вопрос. Кроме того, я планирую использовать emacs для отладки python, поэтому я хотел спросить об emacs.

Я получил ответ в случае с emacs, и мне удалось решить эту проблему с TextMate.

  1. Установите переменные в Предпочтения -> Дополнительно -> Переменные оболочки, и я обнаружил, что TM_ORGANIZATION_NAME уже там для использования. Итак, я просто буду использовать эту переменную.
  2. Используйте эту переменную, если os.environ ['TM_ORGANIZATION_NAME']: вернуть True

Я предполагаю, что переменная оболочки из TextMate исчезнет, ​​когда я закончу ее использовать.

Ответы [ 4 ]

4 голосов
/ 13 сентября 2010

Для Emacs: если python запускается как подчиненный процесс, будет установлена ​​переменная окружения INSIDE_EMACS.

Из документов:

Emacs устанавливает переменную окружения INSIDE_EMACS в подоболочке список через запятую, включая Версия Emacs. Программы могут проверить это переменная, чтобы определить, являются ли они работает внутри подоболочки Emacs.

1 голос
/ 13 сентября 2010

С документы для sys.path:

Как инициализируется при запуске программы, первый элемент этого списка, путь [0], каталог, содержащий скрипт который был использован для вызова Python переводчик. Если каталог скриптов недоступен (например, , если переводчик вызывается в интерактивном режиме или если скрипт читается из стандартного input), path [0] - пустая строка , который направляет Python для поиска модулей сначала в текущем каталоге. уведомление что каталог скриптов вставлен до записей, вставленных в виде результат PYTHONPATH.

Итак

if sys.path[0]:
    # python was run interactively
else:
    # python is running a script.

Или, например, из приглашения IPython (внутри Emacs):

In [65]: sys.path
Out[65]: 
['',  <-------------------- first entry is empty string
 '/usr/bin',
 '/usr/local/lib/python2.6/dist-packages/scikits.statsmodels-0.2.0-py2.6.egg',
 '/usr/local/lib/python2.6/dist-packages/pyinterval-1.0b21-py2.6-linux-i686.egg',
  ... ]
1 голос
/ 13 сентября 2010

sys.argv расскажет вам, как вызывался Python.Я не знаю о TextMate, но когда я говорю Emacs eval buffer, его значение равно ['-c'].Это означает, что он выполняет указанную команду, согласно странице руководства.Если Python запускается напрямую из командной строки без параметров, sys.argv будет [].Если вы запустите скрипт Python, он будет иметь имя скрипта и любые аргументы, которые вы передадите.Возможно, вы захотите настроить свой python-режим в Emacs, и что бы то ни было, эквивалентное в TextMate, поместить что-то особенное, например, -t в командную строку.

Это довольно хакерски.Может быть, есть лучший способ.

0 голосов
/ 13 сентября 2010

Используйте Command-R для непосредственного запуска скрипта

Используйте Shift-Command-R для запуска скрипта из терминала.

...