Открытые магнитные ссылки на Ubuntu с python

У меня есть магнитная ссылка с торрент-сайта, который должен открыть эту программу, называемую трансмиссией. Как мне открыть ее с помощью Python?

Я на Ubuntu, кстати. Я слышал эту вещь называется xdg-open можно сделать трюк, но как я могу использовать его для открытия ссылки магнита?

и если это не тот код, который я ищу, что я должен использовать, чтобы запустить ссылку магнита?

2 ответа

Решение

Взглянув на аргументы командной строки transmission-gtk помогает:

$ transmission-gtk --help

Использование: translation-gtk [OPTION...] [torrent-файлы или URL-адреса]

Быстрый и грязный подход для решения Python заключается в использовании os модуль:

import os
os.system("transmission-gtk urlhere")

Гораздо лучший и более изощренный способ делать такие вызовы внешним программам - использовать subprocess модуль. Еще несколько примеров можно найти в разделе python - как создать подпроцесс?,

xdg-open работает примерно так же. Но вместо прямого вызова клиента передачи он выбирает предпочтительное приложение Torrent (в данном случае предпочтительным является приложение по умолчанию, которое можно установить с помощью меню приложений по умолчанию в системных настройках Ubuntu). Неоднократно указывая вам на тексты справки, которые вызываются при вызове программы из командной строки, может быть интересно проверить коды выхода xdg-open:

$ xdg-open - руководство

...

1 Ошибка в синтаксисе командной строки.

2 Один из файлов, переданных в командной строке, не существует.

3 Требуемый инструмент не найден.

4 Действие не удалось.

Приведенный ниже код суммирует метод загрузки во всех операционных системах.

  import subprocess , os , sys

  def open_magnet(magnet):
        """Open magnet according to os."""
        if sys.platform.startswith('linux'):
            subprocess.Popen(['xdg-open', magnet],
                             stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        elif sys.platform.startswith('win32'):
            os.startfile(magnet)
        elif sys.platform.startswith('cygwin'):
            os.startfile(magnet)
        elif sys.platform.startswith('darwin'):
            subprocess.Popen(['open', magnet],
                             stdout=subprocess.PIPE, stderr=subprocess.PIPE)
        else:
            subprocess.Popen(['xdg-open', magnet],
                             stdout=subprocess.PIPE, stderr=subprocess.PIPE)
Другие вопросы по тегам