Я новичок в Python (и stackoverflow: D), и в школе мы получили задание создавать (обычные пользователи и с правами sudo) и удалять пользователей в системе linux (в моем случае Ubuntu 18.04).Я использую Pycharm для кодирования и Python 3.7 в качестве интерпретатора.Я уже искал ответ, но не смог его найти.Так что я не уверен, что именно вызывает эти проблемы, так что извините за возможно запутанный заголовок.Я постараюсь объяснить это как можно лучше.
Я хочу задать вопрос, хочет ли пользователь создать или удалить пользователя ..
def useradministration():
parameters.question_user ##input("User add (a) or delete (d)?: ").strip()
... с последующим:
#a for adding an user
if parameters.question_user == 'a':
def usercreate():
parameters.question_role ##input("Role for the user: administrator (a) or normal user (n)? ").strip()
# n for normal user - creating via useradd
if parameters.question_role == 'n':
.....
# a for administrator - same as a but with usermod for sudo
elif parameters.question_role == 'a':
.....
#error if its neither n or a
else:
print("Error: wrong specification for role.")
usercreate()
#d for deleting an user
elif parameters.question_user == 'd':
def userdelete():
........
#error if its neither a or d
else:
print("Error: wrong specification for user.")
Первый вопрос. Пример вывода:
User add (a) or delete (d)?: r
Role for the user: administrator (a) or normal user (n)? u
Select username:g
Error: wrong specification for user.
Это дает правильный вывод с «Ошибка: неверная спецификация для пользователя».- но почему до сих пор рассматриваются все вопросы, если первый, если это не так?Это проблема с моим сценарием, или сравнение ввода не работает, или что-то еще?
User add (a) or delete (d)?: r
Error: wrong specification for user.
Это был бы вывод, на который я надеялся.
Другой вопрос для удаления части.Мы должны записать все в файл.Мой userdelete выглядит так:
def userdelete():
parameters.username ##username = input("Select username:")
#try to delete if it exists, print and log it
try:
os.system("sudo userdel -r " + parameters.username)
print("User " + parameters.username + " deleted.")
logging.info("User " + parameters.username + " deleted.")
#exception for when user doesn't exist, just printing and logging it
except OSError:
print("User " + parameters.username + " doesnt exist.")
logging.critical("User " + parameters.username + " doesnt exist.")
pass
userdelete()
Пример вывода:
User add (a) or delete (d)?: d
Role for the user: administrator (a) or normal user (n)? o
Select username:abc
User abc deleted.
userdel: user 'abc' does not exist
Сценарий фактически удаляет пользователя, если он существует.Но почему он задает вопрос о роли и почему он не использует выражение "исключение", если пользователь не существует (потому что abc не существует)?Я использую это неправильно в этом случае?
Я надеюсь, что кто-то может помочь мне.
Спасибо.
РЕДАКТИРОВАТЬ parameters.question_user isиз другого .py файла с именем parameters.py (я импортировал его в файл main.py) и просто содержит
question_user = input("User add (a) or delete (d)?: ").strip()
question_role = input("Role for the user: administrator (a) or normal user (n)? ").strip()
username = input("Select username:")