4

Я часто использую подчиненные оболочки emacs или просто оболочку. Поскольку я работаю в основном над алгоритмами ML, мои команды иногда занимают много времени. Я хотел бы включить автоматическую синхронизацию всех команд, запускаемых в оболочках emacs, чтобы мне не нужно было добавлять лишний / уродливый склеивающий код и мне не приходилось «заранее думать» о времени выполнения. Когда я запускаю команду, ее время выполнения должно автоматически регистрироваться (лучше всего печатать в отдельный буфер), чтобы, если некоторые параметры внезапно заняли много времени, я мог отметить ее время выполнения позже. Все идеи приветствуются, спасибо.

3 ответа3

1

Вдохновленный ответом gt, я нашел способ сделать это на python. Для интерпретатора Python,
Добавьте следующий код в usercustomize.py внутри вашего каталога site-packages .

import time, sys

class ShowTime(object):
    def __str__(self):
        return time.strftime("%c", time.localtime())+" >>> "

sys.ps1=ShowTime()

Это добавит подсказку, которая выглядит как 03/21/13 13:10:42 >>>

РЕДАКТИРОВАТЬ

выполнение только вышеперечисленного нарушило бы полезные функции в режиме Python, такие как send-region и send-buffer. В основном режим Python предполагает, что приглашение будет соответствовать определенному регулярному выражению. (в сторону: это также означает, что нет смысла менять нижний, более базовый, режим коминтов.) В любом случае, мы меняем переменную python-shell-prompt-alist в python.el так, чтобы она соответствовала установленному нами приглашению, затем удаляем python.elc и затем перезапускаем.

Раньше:

(defcustom python-shell-prompt-alist
   '(("ipython" . "^In \\[[0-9]+\\]: *")
    (t . "^>>> "))

Сейчас:

(defcustom python-shell-prompt-alist
  '(("ipython" . "^In \\[[0-9]+\\]: *")
    (t . "^[0-9][0-9]_[0-9][0-9]:[0-9][0-9]:[0-9][0-9]>>> "))

Это будет соответствовать приглашению типа time.strftime("%d_%H:%M:%S", time.localtime())+">>> "

0

Один из способов обойти это с помощью обходного пути - настроить приглашение оболочки на отображение времени, а затем при каждом выполнении вы будете иметь предыдущую отметку времени и новую отметку времени, как только задание будет завершено. Это, вероятно, потребует от вас нажатия перед выполнением любой команды, чтобы получить новое приглашение и возобновить время воспроизведения dsiplayed, но это не является большой проблемой, когда вам нужен быстрый неточный таймер время от времени.

Чтобы получить приглашение типа 15:01:54 MyPath/MyDir> в bash, используйте

export PS1='\t \[\033[01;32m\]\w>\[\033[00m\] '

РЕДАКТИРОВАТЬ Для Windows, попробуйте

PROMPT $T $P$G

получить что-то вроде 17:07:34.60 C:\Programs\Console2>

0

У меня есть метод, который работает для меня под Linux. Это зависит от time . Возможно есть подобная функция под окнами.

Этот метод не годится, если вы хотите использовать программу внутри оболочки, она не работает, скажем, в интерактивном режиме на python . Просто посмотрите на это как на идею о том, как это реализовать, но на самом деле это не то, что я рекомендую, если только вы не выполняете функции shell/cmd внутри * shell * -buffer.

Здесь это идет:

В вашем .emacs файле добавьте это.

(defun my-send (proc cmd)
    (comint-simple-send proc (concat "time " cmd)))
(setq  comint-input-sender 'my-send)

Всякий раз, когда я запускаю команду, она выглядит так (пример: сон на 1 секунду)

$ sleep 1

real    0m1.132s
user    0m0.000s
sys     0m0.000s

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .