将参数传递给调用 python 中函数的 main
Passing an argument to main that calls a function in python
我正在尝试使用 argparse 将参数传递给我的 python 脚本,然后调用函数。我可能会出错的任何想法?
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument('-d','--d', dest='action', action='store_const',const=do_comparison,
help="Diff the current and most recent map file memory information)")
options = parser.parse_args()
return options
def do_comparison(parsed_args):
# do things
def main(args):
options = parse_args()
if __name__ == '__main__':
sys.exit(main())
在我的评论中,我忽略了您正在使用 store_const
和 const=do_comparison
的事实。所以你正在尝试某种回调。
来自 parse_args
的 options
是一个 argparse.Namespace
对象。这是一个简单的对象,类似于字典。其实vars(options)
returns一个字典。
当main
为运行(与-d
)时,options.action
将被设置为const,一个函数。但请记住,在 Python 中,函数首先是 class 对象,并且可以像数字和字符串一样设置为变量等。要使用的函数必须是 'called'.
options.action()
应该最终调用 do_comparison
。实际上,由于该函数需要一个参数,因此您应该使用
options.action(options)
或向函数提供变量或对象的其他方式。
当然,您必须小心未指定 -d
的情况。然后 options.action
将具有默认值(例如 None
)。如果默认值不是可调用的,则此调用将产生错误。
argparse
文档在处理子解析器(子命令)的部分中说明了这种操作。我依稀记得有一个教程将参数值设置为 add
和 multiply
等函数,创建一个简单的算术表达式求值器。
通常,命名空间中的值是字符串或数字,要使用它们,您需要测试字符串是否相等。例如
if options.action is None:
# default action
elif options.action == 'print':
print(options)
else:
do some other backup or error
回调类型的操作是可能的,在某些情况下可能很方便,但这不是通常的安排。
您问过如何将 successfully store a string following the -d, to be used as the function arg
用于:
parser.add_argument('-d','--d', dest='action', dest='function_input', action='store_const', const=diff_map)
A 'store_const' 动作不带参数(实际上 nargs=0
)。它更像是 store_true
。事实上 store_true
只是一个 store_const
有 default=False
和 const=True
.
您需要的是另一个参数,可以在 -d
之前或之后出现。 argparse
尝试灵活安排。
这是一个带有可调用参数和灵活位置参数的简单脚本。
import argparse
def action1(*args):
print 'action1',args
def action0(*args):
print 'action0',args
parser = argparse.ArgumentParser()
parser.add_argument('-d', dest='action', action='store_const', const=action1, default=action0)
parser.add_argument('args', nargs='*')
args = parser.parse_args()
args.action(args.args)
结果 运行s
1238:~/mypy$ python stack32214076.py
action0 ([],)
1238:~/mypy$ python stack32214076.py one two three
action0 (['one', 'two', 'three'],)
1238:~/mypy$ python stack32214076.py one two three -d
action1 (['one', 'two', 'three'],)
1239:~/mypy$ python stack32214076.py -d one two three
action1 (['one', 'two', 'three'],)
1239:~/mypy$ python stack32214076.py -d
action1 ([],)
要使 -d value
对值执行一些操作,请尝试:
parser.add_argument('-d','--action')
默认操作类型存储一个值(例如 action='store'、nargs=None)
args = parser.parse_args()
if args.action: # or is not None
do_comparison(args.action)
如果未给出 -d
args.action
将具有默认的 None
值,此处不会发生任何事情。
如果给定 -d astr
acts.action
将具有字符串值 'astr'
。这个 if
只是用这个值调用了 do_comparison
函数。正是这个(非默认)值的存在触发了函数调用。
这是对解析器和参数的一种相当直接的使用。
我正在尝试使用 argparse 将参数传递给我的 python 脚本,然后调用函数。我可能会出错的任何想法?
def parse_args():
parser = argparse.ArgumentParser()
parser.add_argument('-d','--d', dest='action', action='store_const',const=do_comparison,
help="Diff the current and most recent map file memory information)")
options = parser.parse_args()
return options
def do_comparison(parsed_args):
# do things
def main(args):
options = parse_args()
if __name__ == '__main__':
sys.exit(main())
在我的评论中,我忽略了您正在使用 store_const
和 const=do_comparison
的事实。所以你正在尝试某种回调。
parse_args
的 options
是一个 argparse.Namespace
对象。这是一个简单的对象,类似于字典。其实vars(options)
returns一个字典。
当main
为运行(与-d
)时,options.action
将被设置为const,一个函数。但请记住,在 Python 中,函数首先是 class 对象,并且可以像数字和字符串一样设置为变量等。要使用的函数必须是 'called'.
options.action()
应该最终调用 do_comparison
。实际上,由于该函数需要一个参数,因此您应该使用
options.action(options)
或向函数提供变量或对象的其他方式。
当然,您必须小心未指定 -d
的情况。然后 options.action
将具有默认值(例如 None
)。如果默认值不是可调用的,则此调用将产生错误。
argparse
文档在处理子解析器(子命令)的部分中说明了这种操作。我依稀记得有一个教程将参数值设置为 add
和 multiply
等函数,创建一个简单的算术表达式求值器。
通常,命名空间中的值是字符串或数字,要使用它们,您需要测试字符串是否相等。例如
if options.action is None:
# default action
elif options.action == 'print':
print(options)
else:
do some other backup or error
回调类型的操作是可能的,在某些情况下可能很方便,但这不是通常的安排。
您问过如何将 successfully store a string following the -d, to be used as the function arg
用于:
parser.add_argument('-d','--d', dest='action', dest='function_input', action='store_const', const=diff_map)
A 'store_const' 动作不带参数(实际上 nargs=0
)。它更像是 store_true
。事实上 store_true
只是一个 store_const
有 default=False
和 const=True
.
您需要的是另一个参数,可以在 -d
之前或之后出现。 argparse
尝试灵活安排。
这是一个带有可调用参数和灵活位置参数的简单脚本。
import argparse
def action1(*args):
print 'action1',args
def action0(*args):
print 'action0',args
parser = argparse.ArgumentParser()
parser.add_argument('-d', dest='action', action='store_const', const=action1, default=action0)
parser.add_argument('args', nargs='*')
args = parser.parse_args()
args.action(args.args)
结果 运行s
1238:~/mypy$ python stack32214076.py
action0 ([],)
1238:~/mypy$ python stack32214076.py one two three
action0 (['one', 'two', 'three'],)
1238:~/mypy$ python stack32214076.py one two three -d
action1 (['one', 'two', 'three'],)
1239:~/mypy$ python stack32214076.py -d one two three
action1 (['one', 'two', 'three'],)
1239:~/mypy$ python stack32214076.py -d
action1 ([],)
要使 -d value
对值执行一些操作,请尝试:
parser.add_argument('-d','--action')
默认操作类型存储一个值(例如 action='store'、nargs=None)
args = parser.parse_args()
if args.action: # or is not None
do_comparison(args.action)
如果未给出 -d
args.action
将具有默认的 None
值,此处不会发生任何事情。
如果给定 -d astr
acts.action
将具有字符串值 'astr'
。这个 if
只是用这个值调用了 do_comparison
函数。正是这个(非默认)值的存在触发了函数调用。
这是对解析器和参数的一种相当直接的使用。