Retrieving non-/etc/passwd users with Python 3?

Loris Bennett loris.bennett at fu-berlin.de
Wed Mar 31 08:45:19 EDT 2021


Chris Angelico <rosuav at gmail.com> writes:

> On Wed, Mar 31, 2021 at 11:21 PM Loris Bennett
> <loris.bennett at fu-berlin.de> wrote:
>>
>> Hi,
>>
>> I want to get a list of users on a Linux system using Python 3.6.  All
>> the users I am interested in are just available via LDAP and are not in
>> /etc/passwd.  Thus, in a bash shell I can use 'getent' to display them.
>>
>> When I try to install the PyPi package
>>
>>   getent
>>
>> I get the error
>>
>>     File "/tmp/pip-build-vu4lziex/getent/setup.py", line 9, in <module>
>>       long_description = file('README.rst').read(),
>>   NameError: name 'file' is not defined
>>
>> I duckduckwent a bit and the problem seems to be that 'file' from Python
>> 2 has been replaced by 'open' in Python 3.
>>
>> So what's the standard way of getting a list of users in this case?
>>
>
> I don't have LDAP experience so I don't know for sure, but is the
> stdlib "pwd" module suitable, or does it only read /etc/passwd?
>
> https://docs.python.org/3/library/pwd.html
>
> Failing that, one option - and not as bad as you might think - is
> simply to run getent using the subprocess module, and parse its
> output. Sometimes that's easier than finding (or porting!) a library.

D'oh!  Thanks, 'pwd' is indeed exactly what I need.  When I read the
documentation here

  https://docs.python.org/3.6/library/pwd.html 

I mistakenly got the impression that it was only going to give me the
local users.  It doesn't actually say that, but it mentions /etc/shadow
and not getent.  However, it does talk about the "account and password
database", which is a clue (although our passwords are on an other
system entirely), since "database" is more getent terminology.

In any case, I think 'pwd' is hiding its light under a bushel a bit
here.

Cheers,

Loris

-- 
This signature is currently under construction.


More information about the Python-list mailing list