Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/file/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 使用Argparse创建具有多个选项的必需参数?_Python_File_Argparse - Fatal编程技术网

Python 使用Argparse创建具有多个选项的必需参数?

Python 使用Argparse创建具有多个选项的必需参数?,python,file,argparse,Python,File,Argparse,如果我正确理解Argparse,那么位置参数是用户可以指定的必需参数。我需要使用argparse创建一个位置参数,用户可以在其中指定在他/她打开-h选项时显示的特定类型的参数。我尝试过使用add_argument_group,但当您打开-h选项时,它只显示一个包含其他参数描述的标题 def Main(): parser = argparse.ArgumentParser(description = __doc__, formatter_class = argparse.RawDescri

如果我正确理解Argparse,那么位置参数是用户可以指定的必需参数。我需要使用argparse创建一个位置参数,用户可以在其中指定在他/她打开-h选项时显示的特定类型的参数。我尝试过使用add_argument_group,但当您打开-h选项时,它只显示一个包含其他参数描述的标题

def Main():
    parser = argparse.ArgumentParser(description = __doc__, formatter_class = argparse.RawDescriptionHelpFormatter)
    parser.add_argument("input_directory",help = "The input directory where all of the files reside in")

    sub_parser = parser.add_argument_group('File Type')

    sub_parser.add_argument(".txt",help = "The input file is a .txt file")
    sub_parser.add_argument(".n12",help = "The input file is a .n12 file")
    sub_parser.add_argument(".csv",help = "The input file is a .csv file")

    parser.parse_args()

if __name__ == "__main__":
    Main()
因此,当我运行脚本时,我应该指定以运行脚本。如果我选择.txt、.n12或.csv作为参数,那么脚本应该运行。但是,如果我没有从列出的3个选项中指定文件类型,那么脚本将不会运行


是否有我缺少的argparse函数可以为位置参数指定多个选项?

我认为这太复杂了。如果我正确理解了您的问题,您希望用户输入两个参数:目录名和文件类型。应用程序将只接受三个文件类型值。简单地这样做怎么样:

import argparse

def Main():
    parser = argparse.ArgumentParser(description = __doc__, formatter_class = argparse.RawDescriptionHelpFormatter)
    parser.add_argument("input_directory", help = "The input directory where all of the files reside in")
    parser.add_argument("file_type", help="One of: .txt, .n12, .csv")
    args = parser.parse_args()
    print(args)

if __name__ == "__main__":
    Main()
。。。以及添加应用程序逻辑以拒绝文件类型的无效值

您可以通过parse_args()返回的对象访问用户输入的值。

使用参数强制用户从一组受限值中进行选择

import argparse

def Main():
    parser = argparse.ArgumentParser()
    parser.add_argument("input_directory",help = "The input directory where all of the files reside in")
    parser.add_argument("file_type", help = "File Type", choices=['.txt', '.n12', '.csv'])

    ns = parser.parse_args()
    print(ns)


if __name__ == "__main__":
    Main()

使用选项分组功能Use而不是
add\u argument\u group()


你问的是某种枚举?您能举例说明命令应该是什么样子吗?您的代码定义了4个位置参数,因此需要用户提供4个字符串。正如您所注意到的,
argument\u group
只会影响帮助显示;它在解析过程中什么都不做。我建议您使用带有
choices=['txt',n12','csv']
参数的标记参数进行实验。
import argparse


def Main():
    parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
    parser.add_argument("input_directory", help="The input directory where all of the files reside in")

    group = parser.add_mutually_exclusive_group(required=True)
    group.add_argument("-txt", action='store_true', help="The input file is a .txt file")
    group.add_argument("-n12", action='store_true', help="The input file is a .n12 file")
    group.add_argument("-csv", action='store_true', help="The input file is a .csv file")

    print parser.parse_args()

if __name__ == "__main__":
    Main()