#python #python-3.x #if-statement #exception
#python #python-3.x #if-оператор #исключение
Вопрос:
Я новичок в 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.
Это выдает правильный вывод с «Ошибка: неправильная спецификация для пользователя». — но почему он все еще отвечает на все вопросы, если первое if неверно? Это проблема с моим скриптом, или сравнение входных данных не работает, или что-то еще?
User add (a) or delete (d)?: r
Error: wrong specification for user.
Это был бы результат, на который я надеялся.
Еще один вопрос по части удаления. Мы должны записать все в файл. Мое пользовательское удаление выглядит следующим образом:
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
Скрипт фактически удаляет пользователя, если он существует.
Но почему он задает вопрос о роли и почему он не использует оператор except, если пользователь не существует (потому что abc не существует)? Я неправильно использую это в этом случае?
Я надеюсь, что кто-нибудь сможет мне помочь.
Спасибо.
РЕДАКТИРОВАТЬ параметры.question_user из другого файла .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:")
Комментарии:
1. Почему вы определяете функции внутри своих
if/then
операторов? Функции обычно определяются на верхнем уровне.2. Что вы устанавливаете
parameters.question_user
?3. Почему у вас есть
##
где должно быть=
назначение переменных?4. Опубликованный вами код не может быть фактическим кодом, который вы выполняете. Таким образом, мы не можем сказать, что происходит не так в реальном коде.
5. @Barmar Я новичок, как я уже сказал, и думал, что это может работать следующим образом. Исправлю это впоследствии! — question_user находится в parameters.py вот где я это установил, и я, конечно, импортировал его в основной файл через «параметры импорта» вверху