如何输入()值​​超过4095个字符?

时间:2019-01-28 19:46:58

标签: python-3.x input

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

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

但是,出于this answer中所述的原因,input()仅获取粘贴的前4095个字符。

我的代码大致如下:

import json

foo = input()
json.loads(foo)

当我粘贴长度超过4095个字符的JSON时,json.loads(foo)会引发错误。 (该错误根据JSON截取方式的具体情况而异,但是由于缺少最后一个},它总是以一种或另一种方式失败。)

我查看了the documentation for input(),但没有提及任何对本问题有用的内容。没有用于非规范模式的输入标志,没有用于处理较大输入的备用input()样式功能,等等。

是否可以成功粘贴大量输入?这样一来,我的工具的工作流程就不必像粘贴到文件中,将其保存在某个位置,然后将文件的位置传递到脚本中那样,变得更加灵活。

1 个答案:

答案 0 :(得分:2)

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)