Оболочка Emacs, подчиненная Python, не отображает приглашение после команды matplotlib show () - PullRequest
6 голосов
/ 01 февраля 2012

Итак, я экспериментировал с numpy и matplotlib и наткнулся на какую-то ошибку при запуске python из нижней оболочки emacs.

Когда я отправляю py-файл интерпретатору оболочки, я могу запускать команды после выполнения кода. Командная строка ">>>" выглядит нормально. Однако после того, как я вызвал команду show matplotlib на графике, оболочка просто зависает, а командная строка не отображается.

>>> plt.plot(x,u_k[1,:]);
[<matplotlib.lines.Line2D object at 0x0000000004A9A358>]
>>> plt.show();

Я использую традиционную реализацию C-python. под emacs 23.3 с Python.el Фабиана Галлины Python.el v. 0.23.1 на Win7.

Подобный вопрос был поднят здесь под платформой i-python: запуск matplotlib или enthought.mayavi.mlab из py-shell внутри emacs на windows

ОБНОВЛЕНИЕ: Я продублировал проблему на новой установке Win 7 x64 с типичными двоичными файлами python 2.7.2, доступными на сайте python, и с numpy 1.6.1 и matplotlib 1.1.0 на emacs 23.3 и 23.4 для Windows.

Где-то в оболочке emacs должна быть ошибка.

Ответы [ 4 ]

1 голос
/ 02 февраля 2012

Я думаю, что есть два способа сделать это.

  1. Используйте ipython. Тогда вы можете использовать опцию -pylab. Я не использую python.el Фабиана Галлины, но, думаю, вам понадобится что-то вроде этого:

    (setq python-shell-interpreter-args "-pylab")
    

    Пожалуйста, прочитайте документацию по python.el.

  2. Вы можете вручную активировать интерактивный режим с помощью ion

    >>> from matplotlib import pyplot as plt
    >>> plt.ion()
    >>> plt.plot([1,2,3])
    [<matplotlib.lines.Line2D object at 0x20711d0>]
    >>>
    
0 голосов
/ 21 февраля 2014

Спустя огромное количество времени и опубликовав сообщение об ошибке на странице проекта matplotlib и странице режима python, я обнаружил, что предоставление консоли аргументов --matplotlib в ipython.bat поможет с matplotlib 1.3.1 иipython 1.2.0

Это то, что есть в моем iphython.bat

@python.exe -i D: \ devel \ Python27 \ Scripts \ ipython-script.py console --matplotlib% *

0 голосов
/ 21 марта 2012

Я думаю, что нашел еще более простой способ повесить подчиненную оболочку, но только когда вызывается pdb.Запустите pdb, указав в качестве программы для запуска «python».

Попробуйте этот код:

print "> {<console>(1)<module>() }"
0 голосов
/ 02 февраля 2012

Я думаю, это может быть связано с поведением функции show:

matplotlib.pyplot.show (* аргументы, ** кВт)

При работе в ipython с режимом pylab отобразите все цифры и вернитесь к приглашению ipython.

В неинтерактивном режиме отображаются все цифры и блокируются до цифры были закрыты; в интерактивном режиме это не имеет никакого эффекта, если цифры были созданы до перехода из неинтерактивного в интерактивный режим (не рекомендуется). В этом случае он отображает цифры но не блокирует.

Для одного экспериментального ключевого аргумента block может быть задано значение True или False для отмены поведения блокировки, описанного выше.

Я думаю, что вы столкнулись с поведением блокировки, упомянутым выше, которое привело бы к зависанию оболочки. Возможно, попробуйте запустить функцию как: plt.show(block = False) и посмотрите, даст ли она ожидаемый результат. Если это все еще доставляет вам проблемы, дайте мне знать, и я постараюсь воспроизвести ваши настройки локально.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...