2010-05-21 3 views
5

Dans une question connexe et une réponse here, quelqu'un a émis l'hypothèse que python-shell dans emacs (23.2) était tamponné par un bloc au lieu d'une ligne-buffered. Le correctif recommandé consistait à ajouter sys.stdout.flush() à l'endroit de mon script où je veux que stdio vole son contenu dans le shell python. Y at-il un moyen de tromper python-shell (fonctionnant sous emacs 23.2 sous Windows, pas Linux) en a) pensant qu'il est attaché à un TTY ou b) en utilisant un mode ligne-buffered au lieu du mode block-buffer? Je ne vois pas pourquoi je serais capable de faire ça dans IDLE mais pas emacs.Emacs/Python: exécution de python-shell en mode Buffered Buffer ou Buffered Block

Je préfère personnaliser emacs que d'ajouter sys.stdout.flush() dans mes scripts. Appelez-moi paresseux :-).

Merci,

Mike

Répondre

4

Pour ceux qui se demandent, je pense que le comportement en question est discuté here, dans emacs "7. Les sous-processus \ 7.3 Buffering dans des coquilles et des sous-processus". Dans un tampon shell, stdout est un handle de pipe et est donc tamponné dans des blocs.Si vous souhaitez que le comportement de mise en mémoire tampon de votre programme se comporte différemment, le programme lui-même doit être changé, vous pouvez utiliser setbuf et setvbuf pour manipuler la sémantique de tamponnage. "

résolu en ajoutant ce qui suit à mon init.el (voir ce lien SO here pour plus de détails):

(setenv "PYTHONUNBUFFERED" "x") 
+0

+1 auto-réponses sont bonnes pour le SO – msw

Questions connexes