web-dev-qa-db-ja.com

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を使用して家の窓を見つける1つの方法、

from win32com.Shell import Shell,shellcon
home = Shell.SHGetFolderPath(0, shellcon.CSIDL_PROFILE, None, 0)
64
asdfg

os.path.expanduser(path) が役立つと思います。

UnixおよびWindowsでは、~または~userの初期コンポーネントをそのユーザーのホームディレクトリに置き換えた引数を返します。

Unixでは、初期~は、設定されている場合、環境変数HOMEに置き換えられます。そうでない場合、現在のユーザーのホームディレクトリは、組み込みモジュールpwdを介してパスワードディレクトリで検索されます。 最初の~userはパスワードディレクトリで直接検索されます

Windowsでは、設定されている場合はHOMEとUSERPROFILEが使用されます。それ以外の場合はHOMEPATHとHOMEDRIVEの組み合わせが使用されます。 最初の~userは、上記で作成したユーザーパスから最後のディレクトリコンポーネントを削除することで処理されます

展開に失敗した場合、またはパスがチルダで始まっていない場合、パスは変更されずに返されます。

だからあなたはただすることができます:

os.path.expanduser('~user')
79
Felix Kling

os.path.expanduser(path)があなたの質問に対する最良の答えだと思いますが、Unixの世界で言及する価値がある代替案があります: pwd パッケージです。例えば.

import os, pwd

pwd.getpwuid(os.getuid()).pw_dir
14
Brian M. Hunt
from pathlib import *

str(Path.home())

Python 3.5以上。Path.home()は、 [〜#〜] api [〜#〜]を提供するPathオブジェクトを返します。 非常に便利です。

13
Julius Kunze

home_folder = os.getenv('HOME')

これはWindowsおよびMac OSでも動作するはずで、Linuxでも動作します。

5
user250145

窓用;

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
3
khawarizmi

これは古い質問であり、答えられていることを理解していますが、2セントを追加すると思いました。受け入れられた答えは私のために働いていませんでした。ユーザーディレクトリを見つける必要があり、Sudoの有無にかかわらず動作するようにしたかった。 Linuxでは、ユーザーディレクトリは「/ home/someuser」ですが、ルートディレクトリは「/ root /」です。ただし、私のMacでは、ユーザーディレクトリは「/ Users/someuser」です。これが私がやったことです:

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

これは、MacとLinuxでSudoの有無にかかわらず機能しました。

2
Julien Spronck

実際、環境変数の変更は、ホームを変更する必要があることを示しています。したがって、すべてのプログラム/スクリプトには、コンテキストに新しいホームが必要です。また、結果はそれを変更した人次第です。私はまだhome = os.getenv('USERPROFILE') or os.getenv('HOME')に固執します

正確に何が必要ですか?

2
ring bearer

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)
0
Axel Schneider

Linuxおよび他のUNIXoidでは、/etc/passwd。ホームディレクトリは、6番目のコロンで区切られたフィールドです。ただし、Windowsの環境変数よりも優れた方法についてはわかりません。システムコールがありますが、Pythonから利用できる場合は...

0
Jakob Borg