![如何编写 deluge 脚本来获取有关 torrent 的信息?](https://linux22.com/image/83424/%E5%A6%82%E4%BD%95%E7%BC%96%E5%86%99%20deluge%20%E8%84%9A%E6%9C%AC%E6%9D%A5%E8%8E%B7%E5%8F%96%E6%9C%89%E5%85%B3%20torrent%20%E7%9A%84%E4%BF%A1%E6%81%AF%EF%BC%9F.png)
使用 GUI 处理大量种子并不总是很方便。我尝试过deluge-console info
,但这并没有提供我想要的所有信息。因此,为了说清楚,我需要的是一个脚本,它展示了如何在洪水控制下获取有关种子的信息。
答案1
这是我想出的:
#!/usr/bin/env python2
from deluge.log import setupLogger
from deluge.ui.client import client
from twisted.internet import reactor
import argparse
from operator import itemgetter
import pprint
setupLogger()
def on_get_torrents_status(status):
exclude_labels = args.exclude_labels.split(',') if args.exclude_labels else []
for data in sorted(status.values(), key=itemgetter('label', 'name')):
if data['label'] in exclude_labels:
continue
plus = '+' if data['is_finished'] else ' '
label = data['label'].encode('utf8', 'replace')
name = data['name'].encode('utf8', 'replace')
size = float(data['total_size']) / 1024 / 1024 / 1024
print '%s [%16s] %6.3f Gb %s' % (plus, label, size, name)
if args.verbose >= 1:
save_path = data['save_path'].encode('utf8', 'replace')
print ' save_path: %s' % save_path
reactor.stop()
def on_connected(res):
fields = ['name', 'total_done', 'total_size', 'is_finished', 'hash', 'save_path', 'progress', 'label']
filter_dict = {'label': args.labels.split(',')} \
if args.labels \
else {'label': ['']} \
if args.labels == '' \
else None
client.core.get_torrents_status(filter_dict, fields).addCallback(on_get_torrents_status)
def on_connected_err(res):
res = res.encode('utf8', 'replace')
print('Failed to connect to deluge: {}'.format(res))
parser = argparse.ArgumentParser()
parser.add_argument('-l', '--labels')
parser.add_argument('--exclude-labels')
parser.add_argument('-v', '--verbose', action='count', default=0)
args = parser.parse_args()
d = client.connect()
d.addCallback(on_connected)
d.addErrback(on_connected_err)
reactor.run()
此外,该脚本允许按标签进行过滤。关于可以获得的信息,当未指定字段时,返回核心字段列表([]
)。更多相关内容这里。至于插件,你可以搜索register_status_field
调用,比如这个。