Сохранение кода СУХОЙ при повторном обращении к настройке параметров командной строки
Я только что получил 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 ()" или как-то так.