[python] 파이썬을 사용하여 실제 사용자 홈 디렉토리를 찾는 방법은 무엇입니까?

HOME (linux) 또는 USERPROFILE (windows) 환경 변수를 변경하고 Python 스크립트를 실행하면 시도했을 때 사용자 홈으로 새 값을 반환하는 것을 볼 수 있습니다. os.environ [ ‘HOME’] os.exp

환경 변수에 의존하지 않고 실제 사용자 홈 디렉토리를 찾을 수있는 방법이 있습니까?

편집 :
다음은 레지스트리를 읽어 Windows에서 userhome을 찾는 방법입니다.
http://mail.python.org/pipermail/python-win32/2008-January/006677.html

편집 :
pywin32를 사용하여 Windows 집을 찾는 한 가지 방법,

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



답변

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)귀하의 질문에 대한 최선의 답변 이라고 생각 하지만 유닉스 세계에서 언급 할 가치가있는 대안이 있습니다. 바로 pwd패키지입니다. 예

import os, pwd

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


답변

from pathlib import *

str(Path.home())

Python 3.5 이상에서 작동합니다. 매우 유용한 API를 제공하는 객체를 Path.home()반환 합니다.Path


답변

home_folder = os.getenv('HOME')

이것은 Windows 및 Mac OS에서도 작동해야하며 Linux에서도 잘 작동합니다.


답변

창문의 경우;

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


답변

실제로 환경 변수가 변경되면 집을 변경해야 함을 나타냅니다. 따라서 모든 프로그램 / 스크립트는 맥락에서 새로운 홈을 가져야합니다. 또한 결과는 변경 한 사람에게 달려 있습니다. 나는 여전히 고집 할 것이다
home = os.getenv('USERPROFILE') or os.getenv('HOME')

정확히 무엇이 필요합니까?


답변

나는 이것이 답변 된 오래된 질문이라는 것을 알고 있지만 2 센트를 더할 것이라고 생각했습니다. 받아 들여진 대답은 나를 위해 작동하지 않았습니다. 사용자 디렉터리를 찾아야했고 sudo. Linux에서 내 사용자 디렉토리는 “/ home / someuser”이지만 루트 디렉토리는 “/ root /”입니다. 그러나 내 Mac에서 사용자 디렉토리는 “/ Users / someuser”입니다. 내가 한 일은 다음과 같습니다.

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

이것은 sudoMac과 Linux에서 사용하거나 사용하지 않고 모두 작동했습니다 .