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

Я вижу, что если мы изменим экологическую переменную HOME (linux) или USERPROFILE (windows) и запустим скрипт python, она вернет новое значение в качестве дома пользователя, когда я попытался, os.environ ['HOME'] os.exp

Есть ли способ найти реальный домашний каталог пользователя, не полагаясь на переменную окружения ?. Thanx.
редактировать:
Вот способ найти userhome в окнах, прочитав в реестре,
http://mail.python.org/pipermail/python-win32/2008-January/006677.html

  • Python os.chdir изменяет имя переданного каталога
  • Python - порядок os.listdir
  • Как найти каталог скриптов с Python?
  • Измените каталог на каталог скрипта Python
  • Просмотр файла или каталога Диалог в Python
  • Открыть файл в приложении Django
  • редактировать:
    Один из способов найти окна дома с помощью pywin32,

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

  • Открыть файл в приложении Django
  • Python os.chdir изменяет имя переданного каталога
  • Как найти каталог скриптов с Python?
  • Просмотр файла или каталога Диалог в Python
  • Python - порядок os.listdir
  • Измените каталог на каталог скрипта Python
  • 8 Solutions collect form web for “Как найти реальный домашний каталог пользователя с помощью python?”

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

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

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

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

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

    Таким образом, вы можете просто сделать:

     os.path.expanduser('~user') 

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

     import os, pwd pwd.getpwuid(os.getuid()).pw_dir 

    home_folder = os.getenv ('HOME')

    это должно работать и на Windows и Mac OS. Хорошо работает в Linux.

     from pathlib import * str(Path.home()) 

    работает в Python 3.5 и выше. Path.home() возвращает объект Path предоставляющий API, который я нахожу очень полезным.

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

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

    Для окон;

     import os homepath = os.path.expanduser(os.getenv('USERPROFILE')) 

    даст вам доступ к домашнему каталогу текущего пользователя и

     filepath = os.path.expanduser(os.getenv('USERPROFILE'))+'\\Documents\\myfile.txt' 

    даст вам дескриптор файла ниже;

     C:\Users\urUserName\Documents\myfile.txt 

    Я понимаю, что это старый вопрос, на который был дан ответ, но я думал, что добавлю свои два цента. Принятый ответ не работал на меня. Мне нужно было найти каталог пользователя, и я хотел, чтобы он работал с sudo и без него. В Linux мой каталог пользователя «/ home / someuser», но мой корневой каталог «/ root /». Однако на моем Mac пользовательский каталог «/ Users / someuser». Вот что я сделал:

     _USERNAME = os.getenv("SUDO_USER") or os.getenv("USER") _HOME = os.path.expanduser('~'+_USERNAME) 

    Это работало как с, так и без sudo на Mac и Linux.

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

    Python - лучший язык программирования в мире.