要运行函数,您必须加载脚本,而这个脚本必须获取参数并使用它来执行具有预期值的预期函数。
要获取可以使用的参数
sys.argv
,
argparse
它需要识别函数的名称并运行它
click
,
google/python-fire
,
invoke
-可以使其更简单,因为他们可以自动识别功能并执行它。
首先,我以
sys.argv
import sys
"""
% python3 script.py mul 1 2
% python3 script.py add 1 2
"""
def mul(arg1, arg2):
return arg1 * arg2
def add(arg1, arg2):
return arg1 + arg2
# --- main ---
if len(sys.argv) < 4:
print("Usage: python3 script.py function arg1 arg2")
exit(1)
name = sys.argv[1]
val1 = int(sys.argv[2])
val2 = int(sys.argv[3])
if name == "mul":
result = mul(val1, val2)
print(result)
elif name == "add":
result = add(val1, val2)
print(result)
else:
print("wrong function's name")
与dictionary(而不是许多if/else)执行函数相同:
import sys
"""
% python3 script.py mul 1 2
% python3 script.py add 1 2
"""
def mul(arg1, arg2):
return arg1 * arg2
def add(arg1, arg2):
return arg1 + arg2
# --- main ---
if len(sys.argv) < 4:
print("Usage: python3 script.py function arg1 arg2")
exit(1)
name = sys.argv[1]
val1 = int(sys.argv[2])
val2 = int(sys.argv[3])
functions = {
"mul": mul,
"add": add,
}
if name in functions:
result = functions[name](val1, val2)
print(result)
else:
print("wrong function's name")
和的模拟器
argparse
.
argparse
可以使用允许发送更复杂参数的选项,如跳过参数以使用默认值等,因此它比
sys.argv
我添加了选项
--debug
显示额外信息
import argparse
"""
% python3 script.py --help
% python3 script.py mul 1 2
% python3 script.py add 1 2
% python3 script.py -D mul 1 2
% python3 script.py -D add 1 2
% python3 script.py --debug mul 1 2
% python3 script.py --debug add 1 2
"""
def mul(arg1, arg2):
return arg1 * arg2
def add(arg1, arg2):
return arg1 + arg2
# --- main ---
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('name')
parser.add_argument('val1')
parser.add_argument('val2')
parser.add_argument('-D', '--debug', action='store_true', help='[default: %(default)s]')
args = parser.parse_args()
if args.debug:
print("args:", args)
name = args.name
val1 = int(args.val1)
val2 = int(args.val1)
functions = {
"mul": mul,
"add": add,
}
if name in functions:
if args.debug:
print("executing:", functions[name], "with", val1, val2)
result = functions[name](val1, val2)
print(result)
else:
print("wrong function's name")
具有
点击
它可以更简单,但需要添加装饰器。
#!/usr/bin/env python3
import click
"""
% python3 script.py mul 1 2
% python3 script.py add 1 2
"""
@click.group()
def cli():
pass
@click.command()
@click.argument('arg1', type=click.INT)
@click.argument('arg2', type=click.INT)
def mul(arg1, arg2):
print(arg1 * arg2)
@click.command()
@click.argument('arg1', type=click.INT)
@click.argument('arg2', type=click.INT)
def add(arg1, arg2):
print(arg1 + arg2)
cli.add_command(mul)
cli.add_command(add)
# --- main ---
cli()
与相同
fire
可以更简单
import fire
"""
% python3 script.py mul 1 2
% python3 script.py add 1 2
"""
class Calculator:
def mul(self, arg1, arg2):
return arg1 * arg2
def add(self, arg1, arg2):
return arg1 + arg2
# --- main ---
fire.Fire(Calculator)