Проблема Python с проблемой сравнения if-elif-else и / или строки - PullRequest
1 голос
/ 17 марта 2019

Я новичок в 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:")
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...