Сохранение кода СУХОЙ при повторном обращении к настройке параметров командной строки

Я только что получил Raspberry Pi и создаю для него приложение на основе API Reddit, используя библиотеку PRAW. Я выполняю свои файлы Python с помощью:

sudo python3 main.py

Тем не менее, я хотел бы передать аргументы в этот файл из командной строки (чтобы я мог запустить приложение без вывода сообщений, передав ему аргумент silent например), и я знаю, что могу сделать это с sys.argv[0], sys.argv[1], etc..,

Моя проблема заключается в том, как сделать это, следуя указаниям "СУХОЙ" - "Не повторяй себя", обращаясь к конфигурации, установленной этими параметрами.

Это часть моего кода:

def init():
if (len(sys.argv) >= 1):
    global semisilent
    global silent
    for arg in sys.argv:
        if arg == "semisilent":
            semisilent = True
        if arg == "silent":
            silent = True

print ("--------[ Reddipi v0.1 ]--------\n")

if silent:
    print ("   ++Running in silent mode++   \n")
elif semisilent:
    print ("++Running in semi-silent mode++ \n")
else:
    print ("      Logging in to reddit      ")
    print ("              ....              ")
global r
r = oauth.login()

if not silent:
    print ("        Login successful        \n")

if not silent and not semisilent:
    print ("     Connecting to database     ")
    print ("              ....              ")
db.init(tablename)
if not silent:
    print ("     Connection successful      \n")

if not silent and not semisilent:
    global sub_name
    q_sub = input("      Use custom subreddit?     \n")
    if (q_sub[0]=="y"):
        q_sub = input("     Enter custom subreddit:    \n")
        if ((len(q_sub)==0) or (q_sub==" ")):
            print ("  No valid input. Using default \"" + sub_name + "\" \n")
        else:
            sub_name = q_sub
            print ("\r   Using subreddit \"" + sub_name + "\"\n")
    else:
        print ("        Using default \"" + sub_name + "\"    \n")

Я делаю код очень трудным для чтения, постоянно помещая if not silent и такие, прежде чем другие куски кода. Я также думал о том, чтобы иметь несколько методов с одинаковыми основными функциями, но с опущенным кодом, если пользователь вставил silent или же semisilent, но это приведет к ненужному дублированию кода.

Есть ли другой / хороший способ изменить поведение моих методов без необходимости делать его нечитаемым или переписывать код несколько раз?

Большое спасибо за помощь! - Йерун

1 ответ

Решение

Определите свой собственный метод "печати", который проверяет, установлена ​​ли какая-либо переменная (без вывода сообщений), а затем пропускает печать, если это значение установлено. Таким образом, все ваши строки print ('value') превратятся в нечто вроде myprint ('value'). Мне лично нравится использовать имена функций verbose () и debug () и иметь два уровня журнала. В вашем случае, возможно, назовите их "silent ()" и "semisilent ()" или как-то так.

Другие вопросы по тегам