Python, 参数解析。 -opt1 -part-of-opt1 <parameter> 怎么样?
Python, argparse. What about -opt1 -part-of-opt1 <parameter>?
parser.add_argument('-i', required=True) # One directory path
parser.add_argument('-d', required=True) # Output database path
parser.add_argument('-t', required=True) # DDL-script path
parser.add_argument('-c -i', required=True) # Another directory path
我运行 .py 脚本是这样的:
python.exe s.py -c -i D:\Temp\dir1 -d D:\Temp\out.db -t D:\Temp\ddl.sql -i D:\Temp\dir2
并得到错误:
usage: s.py [-h] -i I -d D -t T -c -i C _I
s.py: error: argument -c -i: expected one argument
如何在不重命名参数名称的情况下使用它?
要详细说明 user2357112 的评论,这 "compound name" 不是问题。在我的脑海中,我无法说出执行此操作的单个程序的单个标志。
即使您设法实现了这一点(没有什么是不可能的,尽管 argparse 帮不上什么忙),这个设计决定也会让您的程序用户大吃一惊。
查看 sys.argv[1:]
列表。我预计会是
['-c', '-i', 'D:\Temp\dir1', '-d', 'D:\Temp\out.db', '-t', 'D:\Temp\ddl.sql', '-i', 'D:\Temp\dir2']
请注意“-c -i”是分开的。因为允许缩写,所以 -c
被接受为 '-c -i' 标志的缩写。但该字符串后跟“-i”和 'D:...'。那是 2 个论点,而不仅仅是一个。因此错误。
是的,您可以引用“-c -i”,这样 shell 就不会拆分它,但即使那样也不能完全正常工作。我认为指定这样的标志没有任何意义。它不建立在先前定义的“-i”操作之上。
In [113]: parser.parse_args(['-c -i', 'D:\Temp\dir1', '-d', 'D:\Temp\out.db',
'-t', 'D:\Temp\ddl.sql', '-i', 'D:\Temp\dir2'])
Out[113]: Namespace(d='D:\Temp\out.db', i='D:\Temp\dir2',
t='D:\Temp\ddl.sql', **{'c _i': 'D:\Temp\dir1'})
In [122]: getattr(Out[113],'c _i')
Out[122]: 'D:\Temp\dir1'
parser.add_argument('-i', required=True) # One directory path
parser.add_argument('-d', required=True) # Output database path
parser.add_argument('-t', required=True) # DDL-script path
parser.add_argument('-c -i', required=True) # Another directory path
我运行 .py 脚本是这样的:
python.exe s.py -c -i D:\Temp\dir1 -d D:\Temp\out.db -t D:\Temp\ddl.sql -i D:\Temp\dir2
并得到错误:
usage: s.py [-h] -i I -d D -t T -c -i C _I
s.py: error: argument -c -i: expected one argument
如何在不重命名参数名称的情况下使用它?
要详细说明 user2357112 的评论,这 "compound name" 不是问题。在我的脑海中,我无法说出执行此操作的单个程序的单个标志。
即使您设法实现了这一点(没有什么是不可能的,尽管 argparse 帮不上什么忙),这个设计决定也会让您的程序用户大吃一惊。
查看 sys.argv[1:]
列表。我预计会是
['-c', '-i', 'D:\Temp\dir1', '-d', 'D:\Temp\out.db', '-t', 'D:\Temp\ddl.sql', '-i', 'D:\Temp\dir2']
请注意“-c -i”是分开的。因为允许缩写,所以 -c
被接受为 '-c -i' 标志的缩写。但该字符串后跟“-i”和 'D:...'。那是 2 个论点,而不仅仅是一个。因此错误。
是的,您可以引用“-c -i”,这样 shell 就不会拆分它,但即使那样也不能完全正常工作。我认为指定这样的标志没有任何意义。它不建立在先前定义的“-i”操作之上。
In [113]: parser.parse_args(['-c -i', 'D:\Temp\dir1', '-d', 'D:\Temp\out.db',
'-t', 'D:\Temp\ddl.sql', '-i', 'D:\Temp\dir2'])
Out[113]: Namespace(d='D:\Temp\out.db', i='D:\Temp\dir2',
t='D:\Temp\ddl.sql', **{'c _i': 'D:\Temp\dir1'})
In [122]: getattr(Out[113],'c _i')
Out[122]: 'D:\Temp\dir1'