我正在尝试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()
样式功能,等等。
是否可以成功粘贴大量输入?这样一来,我的工具的工作流程就不必像粘贴到文件中,将其保存在某个位置,然后将文件的位置传递到脚本中那样,变得更加灵活。
答案 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)