0

老实说,我并不完全知道我在做什么,但我正试图让 Pirate Bay Scope 用 Acestream Player 打开它的结果。Acestream 的问题之一是不知道如何处理磁链接。

下面的原始代码gvfs-open用于打开默认应用程序。

def on_activate_uri (self, scope, uri):
    if uri.startswith("more"):
        results = self.scope.props.results_model
        page = uri.split('__')[2]
        search = uri.split('__')[1]
        results.remove(results.get_iter_at_row(results.get_n_rows()-1))
        self.update_results_model (search, results, page)
        return Unity.ActivationResponse(handled=Unity.HandledType.SHOW_DASH, goto_uri="")
    else:
        print uri
        GLib.spawn_command_line_async('gvfs-open %s' % uri)
        return Unity.ActivationResponse(handled=Unity.HandledType.HIDE_DASH, goto_uri='')

我修改了一行,所以它是:

GLib.spawn_command_line_async("aria2c -d /path/.torrents --on-download-complete /path/.torrent.sh --bt-metadata-only=true --bt-save-metadata=true '%s'" % uri)

我正在使用 aria2c 连接到磁力链接并下载 torrent 文件,一旦下载了文件,aria2c 就会运行一个 bash 脚本,该脚本使用 Acestream 打开 torrent 文件。此过程在命令行上运行良好。我猜我的语法是错误的。

我可以说从范围中选择 torrent 运行 aria2c 并打开端口,但没有创建 torrent 文件,也没有执行我的脚本。奇怪的是,当我添加gnome-terminal -x到命令行的前面时,为了观察它运行以进行调试,它成功地创建了 torrent 文件,并且我的脚本打开了 Acestream 一瞬间。

任何帮助是极大的赞赏。

谢谢

4

1 回答 1

0

它最终通过拼出我想使用 Popen 运行的每个命令来工作,最终实现如下。

    else:
        print uri
        subprocess.Popen('rm /path/.torrents/*', shell=True)
        subprocess.Popen('gnome-terminal -x aria2c --allow-overwrite=true -d /path/.torrents --bt-metadata-only=true --bt-save-metadata=true \'%s\'' % uri, shell=True).wait()
        torrent = subprocess.check_output('ls /path/.torrents/*', shell=True).strip()
        GLib.spawn_command_line_async('acestreamplayer %s' % torrent)
        return Unity.ActivationResponse(handled=Unity.HandledType.HIDE_DASH, goto_uri='')

现在我只需要解析出成人歌曲。毕竟是为了家庭娱乐系统。

于 2013-06-18T20:23:54.740 回答