Существует ли независимый от платформы эквивалент 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()
.