Путь к каталогу кроссплатформенного рабочего стола?

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

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

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

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

2 ответа

Решение

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

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

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

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

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

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

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

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

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

Другие вопросы по тегам