code

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

codestyles 2020. 11. 11. 20:12
반응형

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


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의 유무 관계없이 모두 작동했습니다 .


Linux 및 기타 UNIXoid에서는 항상 /etc/passwd. 홈 디렉토리는 콜론으로 구분 된 여섯 번째 필드입니다. Windows의 환경 변수보다 더 잘하는 방법에 대한 아이디어는 없습니다. 이에 대한 시스템 호출이 있지만 Python에서 사용할 수 있다면 ...


get (translated) user folder names on Linux:

from gi.repository import GLib

docs = GLib.get_user_special_dir(GLib.USER_DIRECTORY_DOCUMENTS)
desktop = GLib.get_user_special_dir(GLib.USER_DIRECTORY_DESKTOP)
pics = GLib.get_user_special_dir(GLib.USER_DIRECTORY_PICTURES)
videos = GLib.get_user_special_dir(GLib.USER_DIRECTORY_VIDEOS)
music = GLib.get_user_special_dir(GLib.USER_DIRECTORY_MUSIC)
downloads = GLib.get_user_special_dir(GLib.USER_DIRECTORY_DOWNLOAD)
public = GLib.get_user_special_dir(GLib.USER_DIRECTORY_PUBLIC_SHARE)
templates = GLib.get_user_special_dir(GLib.USER_DIRECTORY_TEMPLATES)

print(docs)
print(desktop)
print(pics)
print(videos)
print(music)
print(downloads)
print(public)
print(templates)

참고URL : https://stackoverflow.com/questions/2668909/how-to-find-the-real-user-home-directory-using-python

반응형