Emacs / Python: запуск оболочки python в режиме с линейной буферизацией и в режиме блочной буферизации - PullRequest
5 голосов
/ 21 мая 2010

В связанном вопросе и ответе здесь кто-то предположил, что оболочка python внутри emacs (23.2) была буферизована блоком вместо буферизации строки. Рекомендованным исправлением было добавление sys.stdout.flush () к месту в моем скрипте, где я хочу, чтобы stdio сбрасывал его содержимое в оболочку python.

Есть ли какой-то способ обмануть python-shell (работающий в emacs 23.2 в Windows, а не в Linux) либо: а) думая, что он подключен к TTY, либо b), используя линейный буфер вместо режима блочного буфера? Я не понимаю, почему я смог бы сделать это в IDLE, но не в emacs.

Я бы лучше настроил emacs, чем добавил sys.stdout.flush () в мои скрипты. Зовите меня ленивым: -).

Спасибо

Mike

1 Ответ

4 голосов
/ 21 мая 2010

Для тех, кому интересно, я думаю, что соответствующее поведение обсуждается здесь , в emacs "7. Подпроцессы \ 7.3 Буферизация в оболочках и подпроцессах".

"В буфере оболочки stdout является дескриптором канала и поэтому буферизуется в блоках. Если вы хотите, чтобы поведение буферизации в вашей программе велось по-другому, нужно изменить саму программу; вы можете использовать setbuf и setvbuf для манипулирования семантикой буферизации. "

Решено путем добавления следующего в мой init.el (см. Эту ссылку SO здесь для более подробной информации):

(setenv "PYTHONUNBUFFERED" "x")
...