Как ввести () значение длиннее 4095 символов? - PullRequest
0 голосов
/ 28 января 2019

Я пытаюсь input() строку, содержащую большую вставку JSON.

(Почему я вставляю большой шарик json, выходит за рамки моего вопроса, но, пожалуйста, поверьте мне, когдаЯ говорю, что у меня есть не совсем идиотская причина!)

Однако input() захватывает только первые 4095 символов пасты, по причинам, описанным в в этом ответе .

Мой код выглядит примерно так:

import json

foo = input()
json.loads(foo)

Когда я вставляю BLOB-объект JSON длиннее 4095 символов, json.loads(foo) вызывает ошибку.(Ошибка варьируется в зависимости от особенностей отключения JSON, но он неизменно терпит неудачу так или иначе, потому что отсутствует окончательный }.)

Я посмотрел документацию для input(), и он не упомянул ничего, что выглядело полезным для этой проблемы.Нет флагов для ввода в неканоническом режиме, нет альтернативных функций в стиле input() для обработки больших вводов и т. Д.

Есть ли способ успешно вставить большие вводы?Это сделало бы рабочий процесс моего инструмента менее трудоемким, чем вставка в файл, его сохранение где-либо и передача местоположения файла в сценарий.

1 Ответ

0 голосов
/ 28 января 2019

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...