690

Python で現在のユーザーのユーザー名を取得する移植可能な方法はありますか (つまり、少なくとも Linux と Windows の両方で動作する方法)。それは次のように機能しos.getuidます:

>>> os.getuid()
42
>>> os.getusername()
'slartibartfast'

私はグーグルで検索しましたが、決定的な答えが見つからないことに驚きました(おそらく、グーグルの検索が下手だったのかもしれませんが). pwdモジュールは、たとえば Linux ではこれを実現するための比較的簡単な方法を提供しますが、Windows には存在しません。一部の検索結果では、Windows でユーザー名を取得するのが特定の状況 (Windows サービスとして実行中など) では複雑になる可能性があることを示唆していましたが、私はそれを確認していません。

4

14 に答える 14

984

getpassモジュールを見てください

import getpass
getpass.getuser()
'kostya'

可用性: Unix、Windows


ps 以下のコメントによると、「この関数はさまざまな環境変数の値を調べて、ユーザー名を決定します。したがって、この関数は、アクセス制御の目的で (または他の目的で) 依存するべきではありません。これは、任意のユーザーが他のユーザーになりすますことを可能にするためです。 )

于 2009-05-08T22:30:51.030 に答える
148

os.getuid()と組み合わせるのが最善の策ですpwd.getpwuid()

import os
import pwd

def get_username():
    return pwd.getpwuid( os.getuid() )[ 0 ]

詳細については、pwd ドキュメントを参照してください。

http://docs.python.org/library/pwd.html

于 2010-05-24T17:53:51.867 に答える
113

以下も使用できます。

 os.getlogin()
于 2009-10-20T13:00:12.223 に答える
88

おそらく使用できます:

os.environ.get('USERNAME')

また

os.environ.get('USER')

ただし、環境変数が変更される可能性があるため、安全ではありません。

于 2009-05-08T22:35:54.733 に答える
25

これらはうまくいくかもしれません。サービスとして実行しているときにどのように動作するかはわかりません。それらは移植可能ではありませんが、それがos.nameandifステートメントの目的です。

win32api.GetUserName()

win32api.GetUserNameEx(...) 

参照: http://timgolden.me.uk/python/win32_how_do_i/get-the-owner-of-a-file.html

于 2010-01-02T21:35:30.767 に答える
22

ユーザーのホームディレクトリを取得するためにこれが必要な場合、以下は標準ライブラリの一部であるポータブル (少なくとも win32 および Linux) と見なすことができます。

>>> os.path.expanduser('~')
'C:\\Documents and Settings\\johnsmith'

また、そのような文字列を解析して、最後のパス コンポーネント (つまり、ユーザー名) のみを取得することもできます。

参照: os.path.expanduser

于 2013-02-09T01:23:29.800 に答える
3

ctypes FFI ( GetCurrentProcessOpenProcessTokenGetTokenInformationLookupAccountSid )を介して呼び出すのは少し面倒ですが、Windows API を使用して Windows で現在のユーザー名を取得できます。

これを Python から直接実行できる小さなモジュールgetuser.pyを作成しました。使用法:

import getuser
print(getuser.lookup_username())

Windowsと* nixの両方で動作します(後者はpwd他の回答で説明されているようにモジュールを使用します)。

于 2013-11-20T08:12:32.520 に答える
3

Unix と Windows で (とりわけ) ポータブルな方法でユーザー名を取得するために、plx モジュールを少し前に作成しました: http://www.decalage.info/en/python/plx

使用法:

import plx

username = plx.get_username()

(Windows では win32 拡張機能が必要です)

于 2010-02-04T19:52:09.073 に答える