首页 > 解决方案 > 如何输入()值​​超过 4095 个字符?

问题描述

我正在尝试input()一个包含大量 JSON 粘贴的字符串。

(为什么我要粘贴一大块 json 超出了我的问题范围,但是当我说我有一个不完全愚蠢的原因时,请相信我!)

但是,input()出于此答案中所述的原因,仅抓取粘贴的前 4095 个字符。

我的代码大致如下:

import json

foo = input()
json.loads(foo)

当我粘贴超过 4095 个字符的 JSON 数据块时,json.loads(foo)会引发错误。(错误取决于 JSON 如何被切断的具体细节,但它总是以一种或另一种方式失败,因为它缺少最终的}.)

我查看了的文档input(),它没有提到任何看起来对这个问题有用的东西。在非规范模式下没有要输入的标志,没有input()用于处理更大输入的替代样式函数等。

有没有办法能够成功粘贴大量输入?这将使我的工具的工作流程比粘贴到文件中、将其保存在某个位置、然后将文件的位置传递到脚本中更简单。

标签: python-3.xinput

解决方案


Python 必须遵循终端规则。但是您可以使用来自 python 的系统调用来更改终端行为并将其改回(Linux):

import subprocess,json

subprocess.check_call(["stty","-icanon"])
result = json.loads(input())
subprocess.check_call(["stty","icanon"])

或者,考虑尝试从您的提供程序获取缩进json转储,您可以逐行读取,然后解码。

data = "".join(sys.stdin.readlines())
result = json.loads(data)

推荐阅读