Obtaining user information
Tim Chase
python.list at tim.thechases.com
Sat Dec 10 08:31:41 EST 2011
On 12/10/11 01:37, Cameron Simpson wrote:
> On 09Dec2011 19:44, Tim Chase<python.list at tim.thechases.com> wrote:
> | Currently I can get the currently-logged-in-userid via
> | getpass.getuser() which would yield something like "tchase".
>
> _If_ you're on a terminal. _And_ that's exactly what you want.
> Personally I need to the name of geteuid() or getuid() more often.
yes, it deals with emailing so the local userid and full-name are
what I want.
> | Is there a cross-platform way to get the full username (such as from
> | the GECOS field of /etc/passed or via something like NetUserGetInfo
> | on Win32 so I'd get "Tim Chase" instead?
>
> Hmm. Doesn't windows have a posix layer?
>
> pwd.getpwnam(os.getuid())[4].split(',')[0]
>
> is the best I've got. ANd it probably doesn't work in Windows:-(
well, that's a more readable version of my hand-crafted opening
of /etc/passwd and parsing by hand, so thanks! As you mention,
the pwd module isn't available on Win32 so I still have to branch
my code. I found Tim Golden's suggestion in a comment on
ActiveState[1] that gave this one-liner for Win32:
win32net.NetUserGetInfo (win32net.NetGetAnyDCName (),
win32api.GetUserName (), 1)
By changing the "1" to a "20", one of the returned key/value
pairs was "full_name" and the username, so my code currently reads:
def get_user_info():
"Return (userid, username) e.g. ('jsmith', 'John Smith')"
userid = username = getpass.getuser()
if sys.platform.lower().startswith("win"):
try:
import win32net, win32api
USER_INFO_2 = 2
username = win32net.NetUserGetInfo(
win32net.NetGetAnyDCName(),
win32api.GetUserName(),
USER_INFO_2,
)["full_name"] or username
except ImportError:
pass # no win32* module, so default to userid
else:
import pwd
username = pwd.getpwnam(userid).pw_gecos.split(',',1)[0]
return userid, username
It only addresses Win32 and Posix, but that's what I need for
now. Thanks again.
-tkc
[1]
http://code.activestate.com/recipes/66314-get-user-info-on-windows-for-current-user/
More information about the Python-list
mailing list