2017-05-15 16 views
-1

スクリプトを実行するときにフラグ(--slack、または-s)を追加すると、その都度、rep.post_report_to_slack()メソッドをコメントアウトする必要はありません。それを使用したくない。私は実行すると:アクション= 'store_true'が期待通りに動作していないArgparse

$ python my_script.py --slack 

を私はエラーを取得:

my_script.py: error: unrecognized arguments: --slack 

ここでは、コードです:

def main(): 
    gc = Google_Connection() 
    meetings = gc.meetings 

    rep = Report(meetings) 

    if args.slack: 
     rep.post_report_to_slack() 
     print('posted to slack') 


if __name__ == '__main__': 
    import argparse 
    parser = argparse.ArgumentParser() 
    parser.add_argument('-s', '--slack', help='post to slack', 
     action='store_true') 
    args = parser.parse_args() 
    main() 
+2

レプリケートできませんでした。解析部分が正常に機能しています。しかし、実際には引数を使用していません。 – jonrsharpe

+0

私はおそらく何か誤解していますが、引数を使ってargs.slackを呼び出していませんか? –

+1

ああ、わかります - 引数を明示的に渡す方が良いでしょう(これにより、機能のテストと再利用が容易になります)。 – jonrsharpe

答えて

1

あなたのコードは動作しますが、それは、モジュールの名前空間で利用可能argsに依存しています、これは、コマンドラインからスクリプトを呼び出さずに関数を使用することができないということを意味しています。より柔軟かつ従来のアプローチは、それが必要とするものは何でも引数を受け入れるように関数を記述し、その関数へ​​からあなたが得るすべてのものを渡すために、次のようになります。

# imports should usually go at the top of the module 
import argparse 

def get_meeting_report(slack=False): 

    gc = Google_Connection() 
    meetings = gc.meetings 

    rep = Report(meetings) 

    if slack: 
     rep.post_report_to_slack() 
     print('posted to slack') 

if __name__ == '__main__': 
    parser = argparse.ArgumentParser() 
    parser.add_argument('-s', '--slack', help='post to slack', 
     action='store_true') 
    args = parser.parse_args() 
    args = vars(args) 
    get_meeting_report(**args) 

今、あなたはまた、より簡単にargparseの外にあなたの機能を使用することができますそれを直接呼び出すことによって。

+0

よく答えました!ありがとうございました! –

関連する問題