我正在尝试弄清楚如何将 argparse 合并到我创建的接受两个参数的 python 函数中,以便它可以在命令行中执行。
例如下面这个函数:
def function(arg1, arg2):
print(arg1 * arg2)
如何实现 argparse 以便能够在命令行中执行以下命令:
% python3 pythonscript.py function arg1 arg2
我尝试过使用 argparse,但我只找到了如何在 python 脚本而不是函数上使用它的教程。
要运行函数,您必须加载脚本 - 该脚本必须获取参数并使用它来执行具有预期值的预期函数。
要获取参数,您可以使用
sys.argv
、argsparse
,它将需要识别函数的名称并运行它。其他模块 - 如 click
- 可以使其变得更简单,因为它们可以自动识别函数并执行它。
首先,我用
sys.argv
展示示例
#!/usr/bin/env python3
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")
与字典相同(而不是许多 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
类似
import argparse
"""
% 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 ---
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('name')
parser.add_argument('val1')
parser.add_argument('val2')
args = parser.parse_args()
name = args.name
val1 = int(args.val1)
val2 = int(args.val1)
functions = {
"mul": mul,
"add": add,
}
if name in functions:
result = functions[name](val1, val2)
print(result)
else:
print("wrong function's name")