如何将 argparse 合并到具有两个参数的 python 函数中

问题描述 投票:0回答:1

我正在尝试弄清楚如何将 argparse 合并到我创建的接受两个参数的 python 函数中,以便它可以在命令行中执行。

例如下面这个函数:

def function(arg1, arg2):
        print(arg1 * arg2)

如何实现 argparse 以便能够在命令行中执行以下命令:

% python3 pythonscript.py function arg1 arg2

我尝试过使用 argparse,但我只找到了如何在 python 脚本而不是函数上使用它的教程。

python command-line argparse
1个回答
0
投票

要运行函数,您必须加载脚本 - 该脚本必须获取参数并使用它来执行具有预期值的预期函数。

要获取参数,您可以使用

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")
© www.soinside.com 2019 - 2024. All rights reserved.