Существует ли независимый от платформы эквивалент os.startfile()?

Я хочу запустить программу на нескольких платформах (включая Mac OS), поэтому я стараюсь держать ее как можно более независимой от платформы. Я сам использую Windows, и у меня есть строка os.startfile(file). Это работает для меня, но не на других платформах (я читал в документации, я не проверял для себя).

Есть ли эквивалент, который работает для всех платформ?

Кстати, файл является файлом .wav, но я хочу, чтобы пользователи могли использовать свой стандартный медиаплеер, чтобы они могли приостановить/перемотать файл. Поэтому я использую os.startfile(). Я мог бы работать с библиотеками, которые также позволяют воспроизводить/приостанавливать/перематывать медиафайлы.

Ответы

Ответ 1

Похоже, что кросс-платформенный модуль открытия файлов еще не существует, но вы можете полагаться на существующую инфраструктуру популярных систем. Этот фрагмент охватывает Windows, MacOS и Unix-подобные системы (Linux, FreeBSD, Solaris...):

import os, sys, subprocess

def open_file(filename):
    if sys.platform == "win32":
        os.startfile(filename)
    else:
        opener ="open" if sys.platform == "darwin" else "xdg-open"
        subprocess.call([opener, filename])

Ответ 2

Просто используйте webbrowser.open(filename). он может вызвать os.startfile(), open, xdg-open, если это необходимо.

Остерегайтесь, страшный текст в документах:

Обратите внимание, что на некоторых платформах, пытаясь открыть имя файла, используя это функции, могут работать и запускать связанные с операционной системой программа. Однако это не поддерживается и не переносится.

Он отлично работает для меня. Проверьте его в своей среде.

Посмотрите webbrower исходный код, чтобы узнать, сколько работы нужно сделать переносимым.

Также есть проблема с Python bug tracker - Добавить shutil.open. "Портативный интерфейс os.startfile() оказался более сложным, чем ожидалось. Вы можете попробовать представленные исправления, например shutil.launch().