Я что-то думаю по строкам модуля webbrowser, но для файловых браузеров. В Windows я хотел бы открыть проводник, в GNOME на Linux, я хочу открыть nautilus, Konqueror на KDE и т.д. Я бы предпочел не собираться, если я могу его избежать.; -)
Существует ли межплатформенный способ открытия файлового браузера в Python?
Ответ 1
Я бы предпочел не собираться, если я могу избежать этого.
Weeell Я думаю, вам понадобится немного взломанного платформой, но, надеюсь, не так сильно, как жуткий командный модуль webbrowser
. Вот первый удар по нему:
if sys.platform=='win32':
subprocess.Popen(['start', d], shell= True)
elif sys.platform=='darwin':
subprocess.Popen(['open', d])
else:
try:
subprocess.Popen(['xdg-open', d])
except OSError:
# er, think of something else to try
# xdg-open *should* be supported by recent Gnome, KDE, Xfce
Обратите внимание, что версия win32 в настоящее время не выполняется для пробелов в именах файлов. Ошибка 2304 может быть чем-то связана с этим, но, похоже, основная проблема связана с экранированием параметров и оболочкой Windows (cmd /c ...
), в том, что вы не можете вставлять двойные кавычки, и вы не можете ^ -изменить кавычки или пробелы. Мне не удалось найти какой-либо способ процитировать и запустить cmd /c start C:\Documents and Settings
из командной строки вообще.
Комментарий ETA re nosklo: только для Windows, есть встроенный способ сделать это:
if sys.platform=='win32':
os.startfile(d)
Здесь не очень-то приятное альтернативное решение для поиска оболочки и открытия папки с ней, которую вам теперь не нужно, но я уйду. (Отчасти потому, что это может быть полезно для чего-то другого, но в основном потому, что я потратил время, чтобы напечатать проклятую вещь!)
if sys.platform=='win32':
import _winreg
path= r'SOFTWARE\Microsoft\Windows NT\CurrentVersion\Winlogon')
for root in (_winreg.HKEY_CURRENT_USER, _winreg.HKEY_LOCAL_MACHINE):
try:
with _winreg.OpenKey(root, path) as k:
value, regtype= _winreg.QueryValueEx(k, 'Shell')
except WindowsError:
pass
else:
if regtype in (_winreg.REG_SZ, _winreg.REG_EXPAND_SZ):
shell= value
break
else:
shell= 'Explorer.exe'
subprocess.Popen([shell, d])
Ответ 2
Это полный удар в темноте, но посмотрите wxPython, который обеспечивает привязки Python к базовому wxWidgets. Прошло много времени с тех пор, как я в последний раз смотрел на него, но там может быть что-то, что вы можете использовать. В противном случае должно быть относительно легко создать собственный файловый браузер, который будет использовать собственные "виджеты" для каждой ОС.
Помните, что wxPython не является легким весом, он действительно расширит ваше приложение и увеличит ваши зависимости.
Ответ 3
Я не знаю, существует ли готовый к использованию модуль, но если он есть, он должен находиться в cookie-методе Activestate python (http://code.activestate.com/recipes/langs/python/)
Кроме того, по крайней мере, в gnome и на mac os вы можете выполнить "gnome-open http://blah" и "открыть http://blah" (на mac); оба будут открывать URL-адрес в предпочтительном браузере пользователя.
Для linux также проверьте freedesktop.org - общий набор инструментов, охватывающих как Gnome, так и KDE, которые должны включать что-то подобное.