python 中如何设置argparse接受一个必须参数,一个可选参数

现在我的参数设置是:

    parser.add_argument('f', metavar="input file", help='input file')
    parser.add_argument('o', metavar="output file", help='output file')

这样设置则两个参数都是必须的,有什么办法能让"f"是必须参数,而"o"是可选参数,让程序可以通过:

python3 main.py input.txt

python3 main.py input.txt output.txt

两种方法来调用呢?

阅读 24.7k
3 个回答

用nargs参数啊
argparse模块官方文档内容

parser = argparse.ArgumentParser()
parser.add_argument('infile', nargs='?', type=argparse.FileType('r'),
                    default=sys.stdin)
parser.add_argument('outfile', nargs='?', type=argparse.FileType('w'),
                    default=sys.stdout)
parser.parse_args(['input.txt', 'output.txt'])

位置参数都是必须的,想要可选的话用 -o 来单独指定(这种参数名字就叫 optional argument,可选参数)

add_argument('input', ...)
add_argument('--output', '-o', ...)

然后这样调用

python prog.py input.txt -o output.txt
python prog.py input.txt

python main.py -f inputfile -o outputfile

import sys, getopt
opts, args = getopt.getopt(sys.argv[1:], "hi:o:")
input_file=""
output_file=""
for op, value in opts:
  if op == "-f":
    input_file = value
  elif op == "-o":
    output_file = value
  elif op == "-h":
    usage()
    sys.exit()

http://www.jb51.net/article/6...

不知道你要的是不是这个效果

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题