Another issue with the current implementation is
http://bugs.python.org/issue24829. Even if I fix my Python environment by
win_unicode_console so >>> "α" really results in "α" rather than "?", the
feature vanishes when I try to redirect stdout.

On Thu, Nov 19, 2015 at 10:50 PM, Adam Bartoš <dre...@gmail.com> wrote:

> It seems that there will be some refactoring of the tokenizer code.
> Regarding this, I'd like to recall my proposal on readline hooks. It would
> be nice if char* based PyOS_Readline API was replaced by a Python str based
> hook customizable by Python code. I propose to add function
> sys.readlinehook accepting optional prompt and returning a line read
> interactively from a user. There would also be sys.__readlinehook__
> containing the original value of sys.readlinehook (similarly to
> sys.(__)displayhook(__), sys.(__)excepthook(__) and
> sys.(__)std(in/out/err)(__)).
>
> Currently, the input is read from C stdin even if sys.stdin is changed
> (see http://bugs.python.org/issue17620). This complicates fixing
> http://bugs.python.org/issue1602 – the standard sys.std* streams are not
> capable of communicating in Unicode with Windows console, and replacing the
> streams with custom ones is not enough – one has also to install a custom
> readline hook, which is currently complicated. And even after installing a
> custom readine hook one finds out that Python tokenizer cannot handle
> UTF-16, so he has to wrap the custom stream objects just to let their
> encoding attribute have a different value, because readlinehook currently
> returns char* rather than a Python string. For more details see the
> documentation of my package: https://github.com/Drekin/win-unicode-console
> .
>
> The pyreadline package also sets up a custom readline so it would benefit
> if doing so would be easier. Moreover, the two consumers of PyOS_Readline
> API – the input function and the tokenizer – assume a different encoding of
> the bytes returned by the readlinehook. Effectively, one assumes
> sys.stdout.encoding and the other sys.stdin.encoding, so if these two are
> different, there is no way to implement a correct readline hook.
>
> If sys.readlinehook was added, the builting input function would be just a
> thin wrapper over sys.readlinehook removing the newline character and
> turning no input into EOFError. I thing that the best default value for
> sys.readlinehook on Windows would be stdio_readline – just write the prompt
> to sys.stdout and read a line from sys.stdin. On Linux, the default
> implementation would call GNU readline if it is available and sys.stdin and
> sys.stdout are standard TTYs (the check present in the current
> implementation of the input function), and it would call stdio_readline
> otherwise.
>
> Regards, Adam Bartoš
>
>
_______________________________________________
Python-Dev mailing list
Python-Dev@python.org
https://mail.python.org/mailman/listinfo/python-dev
Unsubscribe: 
https://mail.python.org/mailman/options/python-dev/archive%40mail-archive.com

Reply via email to