Кросс-платформенный путь к каталогу рабочего стола?

Есть ли способ получить путь к каталогу рабочего стола кросс-платформенным способом, в идеале, только с использованием стандартных модулей в Python?

Мое текущее решение для Mac OS X + Windows - проверить, в какой системе работает Python с sys.platform, а затем выполните следующие действия:

  • Mac OS X можно обрабатывать с помощью os.path.join(os.path.expanduser('~'), 'Desktop').
  • Windows может использовать нестандартный модуль win32com или модуль ctypes-зависимый winpaths; есть ли стандартная альтернатива?
  • А как насчет Linux?

Я был бы доволен решением, которое работает на Mac OS X, Windows и Linux.

Ответы

Ответ 1

Под окнами, домашний пользователь %HOMEPATH%, который эквивалентен Linux и Mac ~. Под этим находится папка Desktop, как на Mac. Python автоматически преобразует ~ в% HOMEPATH% в Windows, поэтому ваша команда Mac будет работать из коробки на Mac и Windows.

В Linux это немного сложнее. Во-первых, поймите, что в ящике Linux, на котором вы работаете, может не быть рабочего стола, поэтому нет папки рабочего стола пользователя. Если у вас есть диспетчер окон, он может или не может следовать парадигме ~\Desktop. Вводная информация о википедии в менеджерах окон идет гораздо более подробно, в том числе сравнение между несколькими более популярными менеджерами окон X в некоторых из подъязыков.

Лучше всего было бы отступить и спросить себя, почему я хочу/нуждаюсь в папке рабочего стола пользователей? Создать ярлык во время установки? Скорее всего, вам лучше использовать утилиту для установки, например nsis, обрабатывая эти детали. Если это для хранения файлов, даже временных, вы можете захотеть переосмыслить свой дизайн. Или вы ищете что-то, и в этом случае поиск файловой системы может быть способом, вместо проверки хрупкой одиночной папки.

Как и большинство вещей, все зависит от того, что вы хотите выполнить.

Как отметил EOL в своем комментарии, Windows немного сложнее, чем кажется на первый взгляд. Его ссылка на более полную статью в папке Windows Desktop содержит более подробную информацию о локализации для папки рабочего стола. Это очень важно для разработчиков международных приложений, которые необходимо учитывать, используя автоматическую локализацию, встроенную в их набор инструментов, или избегая того, что ее используют.

Ответ 2

Я использовал следующее:

import os
desktop_file = os.path.expanduser("~/Desktop/myfile.txt")

В Unix и Windows верните аргумент с исходным компонентом ~ или ~ пользователь заменен домашним каталогом этого пользователя.

Ссылка: os.path. expanduser