Python 3: открытие магнитной ссылки, содержащейся в переменной

У меня есть магнитная ссылка (например: magnet:?xt=urn:btih:1c1b9f5a3b6f19d8dbcbab5d5a43a6585e4a7db6), содержащаяся в переменной в виде строки, и я хочу, чтобы скрипт открывал программу по умолчанию, которая обрабатывает магнитные ссылки, чтобы она начинает скачивать торрент (как если бы я открыл магнитную ссылку из своего файлового менеджера).

Для ясности ответов скажем, что у нас есть магнитная ссылка в переменной с именем magnet_link.


person Eden Crow    schedule 19.02.2012    source источник
comment
Я сам работаю в Windows, но если бы вы могли дать мне команды для Mac и Linux, а затем я мог бы использовать os.name или что-то подобное, чтобы найти операционную систему, чтобы правильная команда может быть использован.   -  person Eden Crow    schedule 19.02.2012


Ответы (3)


В Windows вы можете использовать os.startfile:

os.startfile(magnet_link)

Для Mac/OSX вы, вероятно, могли бы использовать applescript и направить его в osascript, для Linux вы могли бы использовать xdg-open.

person zeekay    schedule 19.02.2012
comment
Я получаю следующую ошибку: WindowsError: [Error -2147217406] Windows Error 0x%X: 'magent:?xt=urn:btich:1c1b9f5a3b6f19d8dbcbab5d5a43a6585e4a7db6' - person Eden Crow; 19.02.2012
comment
Какая ОС? Вы уверены, что у вас есть приложение, связанное с протоколом магнита? - person zeekay; 19.02.2012
comment
Это в Windows 7 - я почти уверен, что у меня uTorrent связан с протоколом магнита, но как я могу это проверить? - person Eden Crow; 19.02.2012
comment
Для полноты: в Linux вы, вероятно, можете вызвать с ним команду xdg-open. - person Thomas K; 19.02.2012
comment
@EdenCrow Интересно, что магнитная ссылка в вашем вопросе, кажется, выдает эту ошибку для меня, однако настоящая магнитная ссылка, похоже, работает нормально. Я не тестировал экстенсивно, хотя. - person zeekay; 19.02.2012
comment
@zeekay Не могли бы вы привести пример настоящей магнитной ссылки? Тот, который я задал в вопросе, является настоящей магнитной ссылкой и должен привести к некоторой установке Ubuntu. Есть ли какая-то информация, которую я не включил/должен включить? Проблема может заключаться в том, как я сгенерировал саму магнитную ссылку, а не в предложенном вами решении. - person Eden Crow; 19.02.2012
comment
Например, рассмотрите эту магнитную ссылку для OpenOffice: magnet:?xt=urn:btih:bb372b915a4b057b58264847e56407f7a531f369&dn=OpenOffice+3.1.1+%28Language+Pack+Only%29+Linux+%28x86%29+English+%28en-GB%29&tr=http://borft.student.utwente.nl:6969/announce - person zeekay; 19.02.2012
comment
@EdenCrow: попробуйте magnet:... вместо magent:... - person AndiDog; 19.02.2012
comment
Также это должно быть magnet:?xt=urn:btih, а не btich. - person zeekay; 19.02.2012
comment
AndiDog: Спасибо, маленькие опечатки всегда хуже всего! @zeekay Это работает. Спасибо. - person Eden Crow; 19.02.2012
comment
как именно использовать xdg-open для ubuntu для открытия магнитных ссылок? - person ; 09.03.2012

Вот небольшой фрагмент кода, который суммирует метод во всех операционных системах.

  import sys , subprocess
  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)
person Natesh bhat    schedule 28.11.2017

На Mac, если у вас есть установленное приложение, которое справится с этим, просто передайте ссылку на команду открытия

open "some url"

Я бы предположил, что что-то из подпроцесса

person gazhay    schedule 29.02.2012
comment
Если подумать, команда open также позволит вам указать приложение. - person gazhay; 29.02.2012