我需要实现一个python脚本,它充当以给定格式处理数据的服务器:
$ curl -d "longitude=-2&latitude=4" http://localhost:8080
此脚本将以这种方式解释经度和纬度数据,以便返回此特定数据所在的位置。对于潜在输出的另一个例子,看起来像这样:
$ ./state-server &
[1] 21507
$ curl -d "longitude=-2&latitude=4" http://localhost:8080/
["Kentucky"]
$
如何在我的脚本文件中访问这些变量?
感谢。
答案 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。