Чтение файлов JSON из curl в Python

предположим, у меня есть команда в Python, которая выглядит как

command = 'curl ...etc" > result.json'
subprocess.call(command, shell = True)
file = open("result.json").read()

то, что он делает прямо сейчас, - это получить от места, где я завиваюсь, и сохранить результат в результате.json, затем я открываю его, чтобы прочитать. Интересно, есть ли способ прочитать его напрямую, не сохраняя сначала в local?

2 ответов


Вы можете использовать stdlib (json & urllib2), чтобы избежать использования внешних команд:

import json
import urllib2
url = "http://httpbin.org/get"
response = urllib2.urlopen(url)
data = response.read()
values = json.loads(data)

но я бы рекомендовал использовать запросы для упрощения кода. Вот пример из документов:

import requests
r = requests.get('https://api.github.com/user', auth=('user', 'pass'))
r.status_code
200
r.headers['content-type']
'application/json; charset=utf8'
r.encoding
'utf-8'
r.text
u'{"type":"User"...'
r.json()
{u'private_gists': 419, u'total_private_repos': 77, ...}

HTH


В общем случае, если у вас есть команда, которая печатает на свой stdout, вы можете получить вывод, не сохраняя его на диске с помощью subprocess.check_output:

from subprocess import check_output

output = check_output(['source', 'arg1', 'arg2'])

в вашем случае вы можете использовать urllib2 или requests модули Python вместо curl команда, как показано в @Esparta Palma's answer.