Python 从argparse调用方法
我有下面的Python代码,我试图调用方法Python 从argparse调用方法,python,argparse,Python,Argparse,我有下面的Python代码,我试图调用方法genres()、scents()、films(),当argparse在main()中触发时,我在Wiki和堆栈中的主题中读到,它可以通过使用action=和const=来实现,但我的代码工作不正常。这个想法是这样的: python myApp.py--genres“Foo”将给出genres()名称“Foo” python myApp.py——剧集“Bar”“Foobar”将给出剧集()字符串“Bar”“Foobar” 因此,从这些方法中,我将调用另一
genres()、scents()、films()
,当argparse在main()
中触发时,我在Wiki和堆栈中的主题中读到,它可以通过使用action=
和const=
来实现,但我的代码工作不正常。这个想法是这样的:
python myApp.py--genres“Foo”
将给出genres()
名称“Foo”
python myApp.py——剧集“Bar”“Foobar”
将给出剧集()
字符串“Bar”“Foobar”
因此,从这些方法中,我将调用另一个包中的方法,这些方法将发挥所有的魔力
#!/usr/bin/env python
#coding: utf-8
import argparse
def genres():
print("Gotcha genres!")
def episodes():
print("Gotcha episodes!")
def films():
print("Gotcha films!")
def main():
ap = argparse.ArgumentParser(description = 'Command line interface for custom search using themoviedb.org.\n--------------------------------------------------------------')
ap.add_argument('--genres', action = 'store_const', const = genres, nargs = 1, metavar = 'ACT', help = 'returns a list of movie genres the actor worked')
ap.add_argument('--episodes', action = 'store_const', const = episodes, nargs = 2, metavar = ('ACT', 'SER'), help = 'returns a list of eps where the actor self-represented')
ap.add_argument('--films', action = 'store_const', const = films, nargs = 3, metavar = ('ACT', 'ACT', 'DEC'), help = 'returns a list of films both actors acted that decade')
op = ap.parse_args()
if not any([op.genres, op.episodes, op.films]):
ap.print_help()
quit()
if __name__ == '__main__':
main()
argparse
模块设计用于解析命令行参数和选项,并将它们放入方便的数据结构中(op
)。一旦完成了这项工作,argparse
基本上是不可能的,您需要以通常的方式编写常规Python代码
def main():
# The code you already have...
if op.genres: genres(op.genres)
def genres(gs):
# Do stuff with the genres...
虽然从技术上讲,您可以编写代码,使
parse_args
方法直接调用任意参数的任意代码,但这通常不是最好的操作方法。这种方法很好,但不是最好的方法。使用action=
更好,我只需要知道如何使用它@胡安:你为什么说使用动作更好argparse
旨在将命令行参数转换为程序其余部分可以轻松使用的格式。它不应该调用程序本身的其余部分。@Juan我想你错了。阅读action
属性的argparse文档:每个内置操作都只关注一件事——如何在数据结构中存储命令行信息。是的,您可以创建自定义操作来执行任何操作。但是为什么这会比普通的Python代码更好呢?@Juan:您需要使用\uuuu调用\uuu
方法编写一个自定义操作类。您将编写更多的代码,更复杂,并失去对代码功能的控制。假设您需要根据两个参数的值执行某些操作<代码>动作无法处理;它只看到一个论点<代码>行动确实不是答案。