如何使用argparse在python中添加多个参数选项?

如何使用argparse在python中添加多个参数选项?,python,arguments,command-line-arguments,argparse,Python,Arguments,Command Line Arguments,Argparse,我的要求: 现在,当我用这个命令运行python应用程序时 python main.py -d listhere/users.txt 程序将运行并将结果文件保存为预定义名称,例如reports.txt parser = argparse.ArgumentParser(description = "CHECK-ACCESS REPORTING.") parser.add_argument('--user','-d', nargs='?') parser.add_argum

我的要求:

现在,当我用这个命令运行python应用程序时

python main.py -d listhere/users.txt
程序将运行并将结果文件保存为预定义名称,例如reports.txt

    parser = argparse.ArgumentParser(description = "CHECK-ACCESS REPORTING.")
    parser.add_argument('--user','-d', nargs='?')
    parser.add_argument('--output','-d -o', nargs='?')
    parser.add_argument('--input','-i', nargs='?')
    args = parser.parse_args(sys.argv[1:])

   if args.output and args.input:
        #operation that involves output filename too
   elif args.user and not args.input:
       #default operation only
   else:
      #notset
现在我想添加这个功能,允许用户选择文件名的位置和保存位置

python main.py -d -o output/newfilname -i listhere/users.txt
一切都是一样的,但我希望传递另一个参数-o,它将确定要保存的路径和名称。我该怎么做呢。处理或组合多个选项的最佳方式是什么

我试过这个

    parser = argparse.ArgumentParser(description = "CHECK-ACCESS REPORTING.")
    parser.add_argument('--user','-d', nargs='?')
    parser.add_argument('--output','-d -o', nargs='?')
    parser.add_argument('--input','-i', nargs='?')
    args = parser.parse_args(sys.argv[1:])

   if args.output and args.input:
        #operation that involves output filename too
   elif args.user and not args.input:
       #default operation only
   else:
      #notset
当我试图以这种方式解决问题时,我遇到了这个错误

错误:


report.py:错误:无法识别的参数:-o listhere/users.txt

是否要使用类似以下内容:

import argparse

def main():
    parser = argparse.ArgumentParser(
        description='Check-Access Reporting.',
        formatter_class=argparse.ArgumentDefaultsHelpFormatter,
    )
    parser.add_argument(
        '-d',
        dest='discrepancy',
        action='store_true',
        help='Generate discrepancy report.',
    )
    parser.add_argument(
        '--input',
        '-i',
        default='users.txt',
        help='Input file for the report.',
    )
    parser.add_argument(
        '--output',
        '-o',
        default='reports.txt',
        help='Output file for the report.',
    )
    args = parser.parse_args()

    if args.discrepancy:
        print('Report type: {}'.format(args.report_type))
        print('Input file: {}'.format(args.input))
        print('Output file: {}'.format(args.output))
    else:
        print('Report type is not specified.')

if __name__ == '__main__':
    main()
选项的结果--help:

用法:ptest_047.py[-h][-d][--输入][--输出]
检查访问报告。
可选参数:
-h、 --帮助显示此帮助消息并退出
-d生成差异报告(默认值:False)
--输入输入,-i输入
报告的输入文件(默认值:users.txt)
--输出输出,-o输出
报告的输出文件(默认值:reports.txt)
没有任何选项(或缺少选项
-d
):

未指定报告类型。 使用选项
-d

报告类型:差异
输入文件:users.txt
输出文件:reports.txt
使用
-d--input-input.txt--output-output.txt

报告类型:差异
输入文件:Input.txt
输出文件:Output.txt

A
nargs='?'
标记选项有3种工作方式

parser.add_argument('-d', nargs='?', default='DEF', const='CONST')
命令行:

foo.py -d value # => args.d == 'value'
foo.py -d       # => args.d == 'CONST'
foo.py          # => args.d == 'DEF'

利用这一点,您不应该需要这种错误的
-d-o
标志

如果不使用
const
参数,请不要使用“?”

parser.add_argument('--user','-u', nargs='?', const='CONST', default='default_user')
parser.add_argument('--output','-o', default='default_outfile')
parser.add_argument('--input','-i', default='default_infile')

您不能将更多的
-
选项附加到另一个
-
选项,不,
-d-o
在此处不是有效的选项名称。为什么不使用一个
-o
选项来指定输出名称呢?删除-d,它就会起作用。我这样做的原因是如果在-d之后不传递一些值,它就不会起作用。如何将-d作为没有值的参数。尝试将default=''附加到-d,但不起作用如果我使用此参数打印arg的值,我将一无所获
python report.py-d-o listhere/users.txt-i list/here.txt
旧的
-d users.txt
和新的
-i users.txt
之间有什么区别?选项
-d
的用途是什么?问题是你必须在-d标志之后传递一些值,我只想传递标志-d,而不传递任何值it@TaraPrasadGurung选项的顺序并不重要,例如:-o output.txt-i input.txt-d。选项-d在命令行上没有任何值。如果在命令行的某个地方使用了该选项,那么它会将变量
discreence
设置为true。由于非常具有描述性,我对默认值非常不清楚,Constant还认为:
-d-o
bash
拆分为两个字符串;有时,查看<代码> sys .ARGV < /代码>以查找<代码> > AgPARSE> <代码>。请考虑此代码:<代码> Python Test.py-D-I SyValue-O SoValue/<代码>我不想通过值-D,导致不满足条件<代码>。args.input和args.outputOk通过设置const=“some value”来完成