ラズベリーパイを取得しました。PRAWライブラリを使用して、Reddit APIベースのアプリケーションを構築しています。私が使用して私のpythonファイルを実行しています。しかしコマンドラインオプションの設定を繰り返し参照するときにコード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'と同じような意味ですか? –
...これが異なるコンテキストであっても、ロギングモジュールの設計上の決定(つまり、必要な共有状態を参照する責任を負うヘルパ関数で繰り返し条件付きロジックをカプセル化する)が適切です。 –