84

HOME(linux)またはUSERPROFILE(windows)環境変数を変更してPythonスクリプトを実行すると、試してみると、ユーザーホームとして新しい値が返されることがわかります。

os.environ['HOME']
os.exp

環境変数に依存せずに実際のユーザーのホームディレクトリを見つける方法はありますか?

編集:レジストリを読み取ることにより、Windowsでユーザーホームを見つける方法は次のとおりです。http
//mail.python.org/pipermail/python-win32/2008-January/006677.html

編集:
pywin32を使用してWindowsホームを見つける1つの方法、

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

9 に答える 9

100

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

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

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

Windows では、HOME と USERPROFILE が設定されている場合はそれが使用されます。設定されていない場合は、HOMEPATH と HOMEDRIVE の組み合わせが使用されます。イニシャル~userは、上記で作成されたユーザー パスから最後のディレクトリ コンポーネントを取り除くことによって処理されます

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

したがって、次のことができます。

os.path.expanduser('~user')
于 2010-04-19T16:05:40.960 に答える
17

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

import os, pwd

pwd.getpwuid(os.getuid()).pw_dir
于 2010-06-21T14:33:53.323 に答える
5

home_folder = os.getenv('HOME')

これは Windows と Mac OS でも動作するはずで、Linux でもうまく動作します。

于 2010-07-07T14:18:25.823 に答える
4

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

正確には何が必要ですか?

于 2010-04-19T16:05:04.623 に答える
4

窓用;

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
于 2015-12-02T12:44:12.007 に答える
4

これは回答済みの古い質問であることは認識していますが、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 の有無にかかわらず機能しました。

于 2017-03-12T17:12:08.863 に答える
0

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

于 2010-04-19T16:04:37.867 に答える