python使用argparse获取位置参数的长度

时间:2017-11-21 09:40:25

标签: python argparse

我正在学习如何使用位置和可选参数 我的意见:

$ python generate_data.py output --spt google.spt OK-Google.spt --fpx google.fpx OK-Google.fpx

代码:

import argparse
parser = argparse.ArgumentParser(description='Generate an output file from the contents of *.spt and *.fpx.')
parser.add_argument('output_file') # Number of output files should be 1.
parser.add_argument('--spt', required=True, nargs='+', help='spt files') # Number of *.spt should be >= 1.
parser.add_argument('--fpx', required=True, nargs='+', help='fpx files') # Number of *.fpx should be >= 1.
args = parser.parse_args()

print(len(args.output_file), len(args.spt), len(args.fpx))
if len(args.output_file) != 1 or len(args.spt) != len(args.fpx):
    parser.print_help()
    exit(-1)

outputgenerate_data.py的输出文件,输出文件的编号应为1.
--spt是必需的参数,后跟* .spt,其编号应为>= 1 --fpx是* .fpx后跟的必要参数,其编号应为>= 1

我的问题如下:
1.我得到了len(args.output_file) == 6,但没有1.如何确保用户只输入一个输出文件? 2.我想要输出文件也可以放在命令行的末尾,如下所示。

 $ python generate_data.py --spt google.spt OK-Google.spt --fpx google.fpx OK-Google.fpx output

1 个答案:

答案 0 :(得分:2)

  1. 已经完成了。试一试:脚本不接受两个文件名。你很困惑,因为args.output_file是一个字符串。在你的情况下,你输入了一个长度为6的文件名,这解释了为什么len(args.output_file)是6.其他变量args.spt和args.fpx是列表,因为你定义了这些参数nargs关键字。所以len(args.spt)返回列表中的项目数。

  2. 这没有多大意义。由于--fpx和--spt需要多个文件名,因此无法确定命令行末尾的文件名是属于最后一个列表还是输出文件的名称。如果你想通过使用文件扩展名来确定输入了哪种类型的文件来解决这个问题,那么你也可以接受文件名列表的自由格式输入并完全摆脱argparse的东西。 / p>