繁体   English   中英

带有动作='store_true'的Argparse无法正常工作

[英]Argparse with action='store_true' not working as expected

这个想法是在运行脚本时添加一个标志( --slack-s ),这样我就不必在每次不想使用rep.post_report_to_slack()方法时都将其注释掉。 当我跑步时:

$ 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()

您的代码可以工作,但是它依赖于模块名称空间中的args ,这不是很好,因为,一方面,这意味着您必须先从命令行调用脚本,才能使用函数。 一种更灵活和常规的方法是编写函数以接受所需的任何参数,然后将您从argparse获得的所有信息传递给函数:

# 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来更轻松地使用函数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM