KeyError: 'getpwnam (): имя не найдено: user1' - PullRequest
0 голосов
/ 13 сентября 2018

Я создаю простой скрипт, чтобы проверить, существует ли пользователь в системе linux или нет, если нет, то создайте его и получите его 'uid / gid' для дальнейшей обработки. Проблема в том, что 'pwd.getpwnam (' user '). Pw_uid' генерирует ошибки, которые я не могу понять. Если вы посмотрите на трассировку, пользователь уже создан, то почему эта команда не может найти только что созданного пользователя и что может быть возможным для этого? Вот скрипт:

#!/usr/bin/env python3

import sys
import pwd
import grp
import subprocess


def _init():
    _username = "user1"
    return _username


def _checkusername():
    try:
        pwd.getpwnam(_init())

    except KeyError:
        _adduser()

    else:
        print("User already exists, exiting...")
        sys.exit(1)


def _adduser():
    subprocess.Popen(['useradd', '-m', _init()])
    print("User created.")
    _getuid()


def _getuid():
    uid = pwd.getpwnam(_init()).pw_uid
    gid = grp.getgrnam(_init()).gr_gid
    print(uid, gid)


_init()
_checkusername()

А вот след, который я получаю при запуске скрипта:

# python3 test.py
User created.
Traceback (most recent call last):
  File "test.py", line 20, in _checkusername
    pwd.getpwnam(_init())
KeyError: 'getpwnam(): name not found: user1'

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "test.py", line 43, in <module>
    _checkusername()
  File "test.py", line 23, in _checkusername
    _adduser()
  File "test.py", line 33, in _adduser
    _getuid()
  File "test.py", line 37, in _getuid
    uid = pwd.getpwnam(_init()).pw_uid
KeyError: 'getpwnam(): name not found: user1'

Спасибо!

...