파이썬을 사용하여 실제 사용자 홈 디렉토리를 찾는 방법은 무엇입니까?
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)
이것은 sudo
Mac과 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
'code' 카테고리의 다른 글
Oracle의 OVER 절 (0) | 2020.11.11 |
---|---|
log4j가 예외에 대한 스택 추적을 인쇄하지 않습니다. (0) | 2020.11.11 |
히스토그램을 사용하는 Matplotlib / Pandas 오류 (0) | 2020.11.11 |
Django의 manage.py 테스트 명령 중에 실행 된 테스트를 확인하는 방법 (0) | 2020.11.11 |
Adapter 또는 ViewHolder의 Kotlin 합성 (0) | 2020.11.11 |