如何从python中的curl -d命令检索数据

时间:2015-12-29 02:48:07

标签: python curl

我需要实现一个python脚本,它充当以给定格式处理数据的服务器:

$ curl  -d "longitude=-2&latitude=4" http://localhost:8080

此脚本将以这种方式解释经度和纬度数据,以便返回此特定数据所在的位置。对于潜在输出的另一个例子,看起来像这样:

  $ ./state-server &
  [1] 21507
  $ curl  -d "longitude=-2&latitude=4" http://localhost:8080/
  ["Kentucky"]
  $

如何在我的脚本文件中访问这些变量?

感谢。

2 个答案:

答案 0 :(得分:3)

您可以使用子流程来获取输出。

from subprocess import check_output
out = check_output(["curl",  "-d ","longitude=-77.036133&latitude=40.513799" ,"http://localhost:8080/"])

如果你想传递lat和long作为args:

lat, lon  = ....
out = check_output(["curl",  "-d ","longitude={}&latitude={}".format(lat, lon) ,"http://localhost:8080/"]

但是有很多方法只使用python来使用requests等来做你想要的...如果它是json,返回请求可以将json解析为dict,你可以通过键访问输出

如果从命令行传入lat和lon,可以使用sys.argv

import sys

lat, lon = sys.argv[1:]
out = check_output(["curl",  "-d ","longitude={}&latitude={}".format(lat, lon) ,"http://localhost:8080/"])

所以你运行脚本并传递args:

$ cat test.py 
import sys

lat, lon = sys.argv[1:]
print(lat, lon)
$ python setup.py  1234 5678
('1234', '5678')

显然在自己的脚本中将lat和lon传递给check_output。

如果要实际解析curl命令的输出以获取变量:

s = """[1] 21507
  $ curl  -d "longitude=-2&latitude=4" http://localhost:8080/
  ["Kentucky"]
  $"""
import re
lat = re.search("longitude=(-?\d+(.\d+)?)",s)
lon = re.search("latitude=(-?\d+(.\d+)?)",s)

print(lat.group(1), lon.group(1))
('-2', '4')

答案 1 :(得分:0)

当你的指尖上有requests等Python模块时,不要浪费你的时间

import requests
payload = {'longitude': '-77.036133', 'latitude': '40.513799'}
r = requests.get("http://localhost:8080/", params=payload)
txt = r.text

作为一般做法,除非使用您的本机脚本语言不可行,否则不应使用脚本中的系统shell。使用Python,使用本机库比使用curl要容易得多。要安装请求库,请参阅requests installation doc