On Fri, Jul 8, 2016 at 11:17 PM, John Nagle <na...@animats.com> wrote: > If "readline" is imported, "input" gets "readline" capabilities. > It also loses the ability to import control characters. It doesn't > matter where "readline" is imported; an import in some library > module can trigger this. You can try this with a simple test > case: > > print(repr(input())) > > as a .py file, run in a console. Try typing "aaaESCbbb". > On Windows 7, output is "bbb". On Linux, it's "aaa\x1bbbb".
The readline module isn't automatically imported for a script, and it isn't even distributed with Windows Python. You have to install pyreadline to get readline support on Windows. You're seeing the readline-like behavior of a Windows console processed read, i.e. with the console mode ENABLE_PROCESSED_INPUT [1]. The supported command-line editing and history functions are documented for doskey.exe [2], though in modern Windows systems (based on NT), it's actually the console (conhost.exe) that implements all of the doskey functionality. For example, ESC "[c]lears the command from the display". Unfortunately processed input is all or nothing; the console doesn't even process the enter key if processed input is disabled. You'd have to do a lot of lowish-level ctypes or PyWin32 scripting to get something usable, but maybe the CRT's getwche() function is good enough. Try the following: #! /usr/bin/python3 import sys if sys.platform == 'win32': import msvcrt def input(prompt=''): if prompt: print(prompt, end='', flush=True) s = [] while True: c = msvcrt.getwche() if c == '\r': break s.append(c) s = ''.join(s) print(prompt, s, sep='') return s if __name__ == '__main__': print(repr(input('test: '))) [1]: https://msdn.microsoft.com/en-us/library/ms683167 [2]: https://technet.microsoft.com/en-us/library/cc753867 -- https://mail.python.org/mailman/listinfo/python-list