Как найти корневой каталог реального пользователя с помощью Python?

Я вижу, что, если мы изменяем ДОМАШНЕЕ (Linux) или ПРОФИЛЬ ПОЛЬЗОВАТЕЛЯ (окна) переменная окружения и запускаем скрипт Python, это возвращает новое значение как пользователя домой, когда я попробовал, os.environ ['ДОМАШНИЙ'] os.exp

Там какой-либо путь состоит в том, чтобы найти корневой каталог реального пользователя, не полагаясь на переменную окружения?

править:
Вот способ найти userhome в окнах путем чтения в реестре,
http://mail.python.org/pipermail/python-win32/2008-January/006677.html

править:
Один способ найти окна домой с помощью pywin32,

from win32com.shell import shell,shellcon
home = shell.SHGetFolderPath(0, shellcon.CSIDL_PROFILE, None, 0)

69
задан Cœur 13 December 2017 в 13:28
поделиться

5 ответов

Думаю, os.path.expanduser (path) может быть полезным.

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

В Unix начальные ~ заменяются переменной окружения HOME, если она установлена; в противном случае домашний каталог текущего пользователя ищется в каталоге паролей с помощью встроенного модуля pwd . Первоначальный ~ пользователь ищется непосредственно в каталоге паролей .

В Windows будут использоваться HOME и USERPROFILE, если они установлены, в противном случае будет использоваться комбинация HOMEPATH и HOMEDRIVE . Первоначальный ~ пользователь обрабатывается путем удаления последнего компонента каталога из созданного пути пользователя, полученного выше .

Если раскрытие не удалось или путь не начинается с тильды, путь возвращается без изменений.

Итак, вы можете просто сделать:

os.path.expanduser('~user')
83
ответ дан 24 November 2019 в 13:50
поделиться

Действительно, изменение переменной среды указывает на то, что дом должен быть изменен. Таким образом, у каждой программы / сценария должен быть новый дом в контексте; также последствия зависят от человека, который его изменил. Я бы по-прежнему придерживался home = os.getenv ('USERPROFILE') или os.getenv ('HOME')

, что именно требуется?

{{ 1}}
2
ответ дан 24 November 2019 в 13:50
поделиться

В Linux и других UNIXoids вы всегда можете заглянуть в / etc / passwd . Домашний каталог - это шестое поле, разделенное двоеточиями. Не знаю, как сделать лучше, чем переменная окружения в Windows. Для него будет системный вызов, но если он доступен из Python, ...

0
ответ дан 24 November 2019 в 13:50
поделиться

Я думаю, что os.path.expanduser (path) - лучший ответ на ваш вопрос, но есть альтернатива, о которой, возможно, стоит упомянуть в мире Unix: pwd пакет. например

import os, pwd

pwd.getpwuid(os.getuid()).pw_dir
15
ответ дан 24 November 2019 в 13:50
поделиться

home_folder = os.getenv('HOME')

Это должно работать на Windows и Mac OS тоже, хорошо работает на Linux.

5
ответ дан 24 November 2019 в 13:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: