Я создаю простой скрипт, чтобы проверить, существует ли пользователь в системе 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'
Спасибо!