【问题标题】:Python 3 on Windows: extend stdin.readline() line buffer sizeWindows 上的 Python 3:扩展 stdin.readline() 行缓冲区大小
【发布时间】:2021-04-07 19:10:46
【问题描述】:

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

如何扩展此限制?我需要用于原型制作的大浆料。

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

缓冲区在 macOS 上似乎是 1024。

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

在C语言中,可以用setvbuf()扩展缓冲区,但是这个函数没有被Python包裹,这很遗憾。我想我会尝试在MSVCRT.DLLctypes 中调用它。

【问题讨论】:

    标签: python python-3.x windows stdin


    【解决方案1】:

    (在 Mac 操作系统上) 将import readline 添加到您的python 脚本将扩展input() 的限制

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

    readline 模块定义了许多函数,以方便从 Python 解释器完成和读取/写入历史文件。该模块可以直接使用,也可以通过 rlcompleter 模块使用,该模块支持在交互式提示下完成 Python 标识符。使用此模块进行的设置会影响解释器的交互式提示和内置 input() 函数提供的提示的行为。

    例子

    import readline
    
    data = input()
    
    print(data)
    

    【讨论】:

      【解决方案2】:

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

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

      所以目前input() 可以作为一种解决方法。

      【讨论】:

      • 在mac os上,两个函数的限制是1024
      猜你喜欢
      • 1970-01-01
      • 2011-11-26
      • 1970-01-01
      • 2021-11-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多