Python argparse:默认标志

3

我的脚本需要精确地传入两个参数。下面的第三个是我正在努力解决的。

python myscript -e arg1 arg2

python myscript -i arg1 arg2

python myscript arg1 arg2

我可以很容易地使用argparse让前两个工作,但是我无法想出如何使用argparse让第三个工作。基本上,当没有指定标志时,我希望执行与指定-e标志相同的处理。如果没有精确指定2个参数,脚本应该报错。

我查看了Python文档,发现有一种方法可以为标志指定默认值,但是我无法找到一种使参数本身成为默认值的方法。

parser.add_argument('',nargs=2)

虽然我是Python的新手,但我知道尝试上述方法是愚蠢的,但我还是抱着希望它会像魔法一样奇迹般地工作。 :)

能否有人帮我找到一种让无参情况工作的方法? 谢谢


那么...你添加了 arg1arg2 参数吗? - user2357112
parser.add_argument('input', nargs=2) - user707650
在前两种情况下,你认为 arg1 arg2-e-i 标志的参数,还是像第三种情况一样是位置参数?顺序重要吗? - hpaulj
@hpaulj:是的,顺序很重要。我正在对文件进行一些文本操作,arg1被视为源文件,而arg2则是我的目标文件。-e-i是标志,告诉我这些文件是模块内部还是外部的。 - Nike
1个回答

3
只需添加arg1arg2这两个必需的位置参数:
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('-e', action='store_true')
parser.add_argument('-i', action='store_true')
parser.add_argument("arg1")
parser.add_argument("arg2")

args = parser.parse_args()
print(args)

使用方法:

$ python test.py value1 value2 --help
usage: test.py [-h] [-e] [-i] arg1 arg2

positional arguments:
  arg1
  arg2

optional arguments:
  -h, --help  show this help message and exit
  -e
  -i

谢谢alecxe。这就是我在寻找的! - Nike

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接