У меня только что появился малиновый Pi, и я создаю для него приложение на основе Reddit API, используя библиотеку PRAW. Я выполнение моего питон файлов с помощью:Сохранение кода DRY при повторном обращении к конфигурации параметров командной строки
sudo python3 main.py
Однако, я хотел бы передать аргументы в этот файл из командной строки (так что я могу запустить приложение молча, передав ей аргумент silent
, например), и я знаю, что смогу сделать это с sys.argv[0], sys.argv[1], etc..
.
Моя проблема заключается в следующем: DRY - Не повторяйте себя - ссылаясь на конфигурацию, установленную этими параметрами.
Это часть моего кода:
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
, но это приведет к ненужному дублированию кода.
Есть ли другой способ улучшить поведение моих методов, не делая его нечитаемым или переписывая код несколько раз?
Большое спасибо за помощь! - Jeroen
Вы имеете в виду как «logging»? –
... даже если бы это было в другом контексте, то после принятия проектных решений модуля регистрации (т. Е. Инкапсуляции повторяющейся условной логики в вспомогательные функции, отвечающие за любое необходимое разделяемое состояние) было бы уместно. –