具有 action='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 之外更轻松地使用您的函数。
想法是在 运行 脚本时添加一个标志(--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 之外更轻松地使用您的函数。