Чтение файлов 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.