Python 3 on Windows:扩展 stdin.readline() 行缓冲区大小

Python 3 on Windows: extend stdin.readline() line buffer size

在 Windows 上,交互式 Python sys.stdin.readline() 将 Ctrl+V 粘贴截断为 512 个字符。

如何延长此限制?我需要大量粘贴来制作原型。

尝试了 fdopen() 技巧,但没有奏效。

在 macOS 上缓冲区似乎是 1024。

UPD: 看起来缓冲区大小是 compile-time constant.

在C中,可以用setvbuf()扩展buffer,但是这个函数没有被Python包裹,很遗憾。我想我会尝试在 MSVCRT.DLL 中用 ctypes.

调用它

这是一个错误:https://bugs.python.org/issue41849

  • sys.stdin.readline() 有 512 个字符的缓冲区,确实
  • input() 有 16K 字符缓冲区

因此目前 input() 可以用作解决方法。

(在 Mac OS 上) 将 import readline 添加到您的 python 脚本将扩展 input()

的限制

来自 https://docs.python.org/3/library/readline.html

The readline module defines a number of functions to facilitate completion and reading/writing of history files from the Python interpreter. This module can be used directly, or via the rlcompleter module, which supports completion of Python identifiers at the interactive prompt. Settings made using this module affect the behaviour of both the interpreter’s interactive prompt and the prompts offered by the built-in input() function.

例子

import readline

data = input()

print(data)