使用bash脚本输入python函数

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

我有一个函数,它从 .sh 文件中获取以下形式的输入

my_fun.py --arg1 $arg1 --arg2 $arg2 --arg3 $arg3 

这里的问题是,根据arg1的值,输入的数量是不同的。我如何使用

argparse
来实现它?

这里我想用

parser = argparse.ArgumentParser()
,但是不知道要读多少行。

谢谢。

我没有太多想法。

argparse
1个回答
0
投票

这里有一个建议:分两遍解析你的论点。在第一遍中,您解析

--arg1
。然后根据你得到的值,构建一个解析器来解析其余的。

#!/usr/bin/env python3
import argparse

# First pass: parse only --arg1
parser = argparse.ArgumentParser()
parser.add_argument("--arg1")
options, remainder = parser.parse_known_args()

# Second pass: parse the rest.
# Say if --arg1 is foo, we got 2 additional flags,
# if --arg1 is bar, we got 1 more
parser = argparse.ArgumentParser()
if options.arg1 == "foo":
    parser.add_argument("--arg2")
    parser.add_argument("--arg3")
elif options.arg1 == "bar":
    parser.add_argument("--arg4")
parser.parse_args(remainder, options)
print(options)

以下是一些互动:

$ python3 main.py --arg1 foo --arg2 cow --arg3 dog
Namespace(arg1='foo', arg2='cow', arg3='dog')

$ python3 main.py --arg1 bar --arg4 cat
Namespace(arg1='bar', arg4='cat')

注释

  • 在第一遍中,我们使用
    parse_known_arg
    仅解析
    --arg1
    并忽略其余部分。结果存储在命名空间对象中,
    options
    。命令行的其余部分存储在
    remainder
    中。
  • 在第二遍中,我们构建一个新的解析器,并根据
    --arg1
    的值添加不同的参数。
  • 同样在第二遍中,当我们调用
    parse_args
    时,我们传入上一次调用
    options
    中的命名空间。这样,我们将所有命令行标志合并到一个命名空间对象中。
© www.soinside.com 2019 - 2024. All rights reserved.