繁体   English   中英

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

[英]how to add multiple argument options in python using argparse?

我的要求:

现在,当我使用此命令运行我的python应用程序时

python main.py -d listhere/users.txt

程序将运行并将结果文件保存为预定义名称,例如reports.txt

现在我想添加此功能,以允许用户选择放置文件名的内容以及保存位置

python main.py -d -o output/newfilname -i listhere/users.txt

一切都是一样但我想要传递另一个参数-o来确定要保存的filpath和名称。 我该怎么做。 处理或组合多个选项的最佳方法是什么。

我试过这个

    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

一个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'

https://docs.python.org/3/library/argparse.html#const

利用这一点,你不应该需要像这个错误的-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')

你想要这样的东西:

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

usage: ptest_047.py [-h] [-d] [--input INPUT] [--output OUTPUT]

Check-Access Reporting.

optional arguments:
  -h, --help            show this help message and exit
  -d                    generate discrepancy report (default: False)
  --input INPUT, -i INPUT
                        input file for the report (default: users.txt)
  --output OUTPUT, -o OUTPUT
                        output file for the report (default: reports.txt)

没有任何选项(或缺少选项-d ):

Report type is not specified.

使用选项-d

Report type: discrepancy
Input file: users.txt
Output file: reports.txt

使用-d --input input.txt --output output.txt

Report type: discrepancy
Input file: input.txt
Output file: output.txt

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM