如何使用argparse在python中添加多个参数选项?
我的要求: 现在,当我用这个命令运行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 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
Anargs='?'
标记选项有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”来完成