0

我想从这里获取“最新”版本标签的值:https ://papermc.io/repo/repository/maven-public/com/destroystokyo/paper/paper-api/maven-metadata.xml

我尝试使用这个 python:

import urllib.request
from xml.etree import ElementTree

opener = urllib.request.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]

data = opener.open('https://papermc.io/repo/repository/maven-public/com/destroystokyo/paper/paper-api/maven-metadata.xml').

root = ElementTree.fromstring(data)

versioning = root.find("versioning")
latest = versioning.find("latest")
snip.rv = latest.text

问题是,在 vim 内部使用这个(我正在尝试用它制作 UltiSnips 片段)会使整个 vim在代码完成运行后变得非常慢。

是什么导致我的程序在我添加 ^^ 代码时变慢?

4

1 回答 1

0

I don't know if this will solve the performance issue in vim, but the code was not running for me due to errors in it.

opener.open returns a file-like object, so you should read it using ElementTree.parse instead of ElementTree.fromstring (actually there is a trailing dot after opener.open(...), so I don't know if you missed a read() thereafter. In that case the return value is indeed a string).

Apart from that, you could try to close the opener to see if that frees up some resources (or use the with).

I attach an example of the improved code:

import urllib.request
from xml.etree import ElementTree

opener = urllib.request.build_opener()
opener.addheaders = [('User-agent', 'Mozilla/5.0')]

with opener.open('https://papermc.io/repo/repository/maven-public/com/destroystokyo/paper/paper-api/maven-metadata.xml') as data:
    root = ElementTree.parse(data)
    latest = root.find("./versioning/latest")
    snip.rv = latest.text
于 2018-12-16T17:58:47.737 回答