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)
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)
があなたの質問に対する最良の答えだと思いますが、Unixの世界で言及する価値がある代替案があります: pwd
パッケージです。例えば.
import os, pwd
pwd.getpwuid(os.getuid()).pw_dir
from pathlib import *
str(Path.home())
Python 3.5以上。Path.home()
は、 [〜#〜] api [〜#〜]を提供する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
これは古い質問であり、答えられていることを理解していますが、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
の有無にかかわらず機能しました。
実際、環境変数の変更は、ホームを変更する必要があることを示しています。したがって、すべてのプログラム/スクリプトには、コンテキストに新しいホームが必要です。また、結果はそれを変更した人次第です。私はまだhome = os.getenv('USERPROFILE') or os.getenv('HOME')
に固執します
正確に何が必要ですか?
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)
Linuxおよび他のUNIXoidでは、/etc/passwd
。ホームディレクトリは、6番目のコロンで区切られたフィールドです。ただし、Windowsの環境変数よりも優れた方法についてはわかりません。システムコールがありますが、Pythonから利用できる場合は...