Открытые магнитные ссылки на 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)