[Python-bugs-list] [ python-Bugs-584566 ] os.getlogin() fails

noreply@sourceforge.net noreply@sourceforge.net
Thu, 25 Jul 2002 07:53:09 -0700

Bugs item #584566, was opened at 2002-07-21 17:29
You can respond by visiting: 

Category: Python Library
Group: Python 2.2.1
Status: Closed
Resolution: Works For Me
Priority: 5
Submitted By: Robert Blyler (rlblyler)
Assigned to: Nobody/Anonymous (nobody)
Summary: os.getlogin() fails

Initial Comment:
The os.getlogin() fails with a no-such file. I
originally reported this bug to the gentoo bug tracking

see: http://bugs.gentoo.org/show_bug.cgi?id=4647

The issue seems to be that some xterminals ( gterm in
this case ) do not register themselves with utmp, which
this function uses.  I have two workarounds, one of
reverting back to using:


and another for:

print pwd.getpwuid(os.geteuid())[0]

This seems to violate the portability of os.getlogin()
though, and was wondering if  a different internal
implementation should be used. I would expect that at
any rate it shouldn't cause a program to crash.

The following is the original error:

Traceback (most recent call last):
  File "./trilliji.py", line 25, in ?
  File "./trilliji.py", line 16, in main
    Connections = TriCon()
  File "./clsTriCon.py", line 16, in __init__
OSError: [Errno 2] No such file or directory


>Comment By: Michael Hudson (mwh)
Date: 2002-07-25 14:53

Logged In: YES 

the os module isn't about providing polite wrappers for
sys/library calls. it's about thin wrappers so you can read
the system manpages to find out why you don't want to use
them <wink>.

print pwd.getpwuid(os.geteuid())[0] is the best answer I
know of.


Comment By: Robert Blyler (rlblyler)
Date: 2002-07-25 02:11

Logged In: YES 

Can you explain then why python doesn't implement that
method to determine the logged in user? If it is so bad
either why does it exist or why isn't it implemented better?


Comment By: Jeremy Hylton (jhylton)
Date: 2002-07-24 15:24

Logged In: YES 

This is not a Python bug.  Python is just calling the
platform getlogin().  On my Linux box, a C program that
calls getlogin() reports exactly the same error.  It returns
NULL and sets errno to ENOENT, which strerror() converts to
"No such file or directory."

The man page for getlogin on Linux says:

       For most purposes, it is more useful to use  the 
       ment  variable  LOGNAME to find out who the user is.
       is more flexible precisely because the user can  set
       NAME arbitrarily.

The same man page describes cuserid() and says:

       Nobody knows precisely what cuserid() does - avoid 
it  in
       portable  programs  -  avoid  it  altogether  -  use
       wuid(geteuid()) instead, if that is what  you  meant.
       NOT USE cuserid().


You can respond by visiting: