我正在尝试下载最新的
just
二进制文件,我可以在 bash 中使用以下代码行来完成此操作:
wget -q $(curl -s https://api.github.com/repos/casey/just/releases/latest | python -c 'import json,sys;print(json.load(sys.stdin)["assets"][-1]["browser_download_url"])')
这可行,但我同时使用
curl
和wget
,我觉得看起来不对。有没有办法只用wget
来做到这一点?
wget URL
与 curl -O URL
基本相同。
curl
与 wget -o- URL
基本相同。
但是既然你已经使用了python,为什么不直接从python发起HTTP请求呢?
或者不使用 python,而是使用 jq 从 JSON 中提取相关位:
curl -O "$(curl https://api.github.com/repos/casey/just/releases/latest | jq -r '.assets|last|.browser_download_url')"
我建议按照以下方式使用标准库完成
python
中的所有操作
import json, urllib.request
with urllib.request.urlopen('https://api.github.com/repos/casey/just/releases/latest') as response:
url = json.load(response)["assets"][-1]["browser_download_url"]
fname = url.split('/')[-1]
urllib.request.urlretrieve(url, fname)
urllib.request
观察到urlopen
的行为与open
类似,但允许通过网络读取数据,它可以与json.load
一起使用,与open
相同。我提取所需的 URL,然后从它的最后部分创建 fname,然后使用 urlretrieve
从 url
下载文件,并将其保存在当前工作目录中的名称 fname
下。
是的,使用
-O
标志和文件名。
wget -O ./filename.json "https://hostname/path-to-json"