Emacs: оболочка Python нижнего режима кажется “изолированной”

Я - Python (3.1.2)/emacs (23.2) новичок, учащий мне tkinter использование pythonware учебного руководства, найденного здесь. Соответствующие нормы вставляются ниже вопроса.

Вопрос: когда я нажимаю кнопку Hello (который должен вызвать say_hi функцию), почему делает нижнюю оболочку Python (т.е. тот, который я начал с C-c C-c), ожидают для выполнения функции печати say_hi, пока я любой не a) нажмите кнопку Quit или b) закрывает корневой виджет? Когда я пробую то же в НЕАКТИВНОМ, каждый щелчок кнопки Hello производит непосредственную печать в НЕАКТИВНОЙ оболочке Python, даже прежде чем я нажму Quit или закрою корневой виджет.

Есть ли некоторая причуда в пути emacs, выполняет оболочку Python (по сравнению с Неактивным), который вызывает это "изолированное" поведение? Я заметил подобные задержки emacs по сравнению с Неактивным, поскольку я работал через Euler проблемы Проекта, но это - самый ясный пример, который я видел все же.

К вашему сведению: Я использую python.el и имею относительно чистый init.el...

(setq команда Python Python "d:/bin/python31/python")

единственная строка в моем init.el.

Спасибо,

Mike

=== Начните код ===

from tkinter import *

class App:

    def __init__(self,master):

        frame = Frame(master)
        frame.pack()

        self.button = Button(frame, text="QUIT", fg="red", command=frame.quit)
        self.button.pack(side=LEFT)

        self.hi_there = Button(frame, text="Hello", command=self.say_hi)
        self.hi_there.pack(side=LEFT)

    def say_hi(self):
        print("hi there, everyone!")

root = Tk()

app = App(root)

root.mainloop()

6
задан Luke Girvin 6 February 2012 в 22:05
поделиться

1 ответ

Я бы предположил, что не будучи подключенным к tty, интерпретатор Python (через C stdio) переключается на block buffered от line buffered и не промывает stdout до закрытия. Выполнение os.isatty(1) в буфере "Inferior Python:run Shell Compile" возвращает false, что добавляет весомости этой догадке.

def say_hi(self):
    print("hi there, everyone!")
    sys.stdout.flush()

Может иметь значение.

4
ответ дан 17 December 2019 в 07:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: