[英]How to pass the argument using argparse in xml format?
我正在尝试将参数作为CLI传递,它有两个命令SHOW和CREATE我只想知道如何以xml格式传递命令,就像我的命令一样
$ program.py <CREATE ID=12334> # where CREATE is cmd and 'ID=' is fixed constant and integer has to be passed as input.
# matches the pattern if it is the valid pattern then
$ <pattern>valid</pattern>
#else should print <pattern> invalid </pattern>
它是一个错误的代码,但我只是展示有关代码的想法。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('<CREATE ID=>', '--option', help="Best option name here.")
args = parser.parse_args()
if args.option == '<CREATE ID= 123 >':
create()
elif args.option == '<SHOW ID= 123':
show()
else:
print("Didn't make it!")
我希望输出像
$ program.py <CREATE ID= (input) COLOR=GREEN>
if the operation has been successful:
$ <MESSAGE>OK</MESSAGE>
$ program.py <SHOW ID=(input)>
<SHOW ID= 1>\n
//some more functions
</SHOW>\n
shell( bash
)或argparse
都不以任何特殊方式处理此xml
格式。 它只是一个字符串或字符串列表。
一个更简单的脚本:
import argparse, sys
print(sys.argv)
parser = argparse.ArgumentParser()
parser.add_argument('option') # 'option' is the 'dest'
args = parser.parse_args()
print(args)
if 'CREATE' in args.option:
print('creating')
elif 'SHOW' in args.option:
print('showing')
else:
print('else')
测试运行:
2333:~/mypy$ python3 stack57237963.py "<CREATE ID=123>"
['stack57237963.py', '<CREATE ID=123>']
Namespace(option='<CREATE ID=123>')
creating
2337:~/mypy$ python3 stack57237963.py "<SHOW ID=123>"
['stack57237963.py', '<SHOW ID=123>']
Namespace(option='<SHOW ID=123>')
showing
2337:~/mypy$ python3 stack57237963.py "<FLUB ID=123>"
['stack57237963.py', '<FLUB ID=123>']
Namespace(option='<FLUB ID=123>')
else
2337:~/mypy$ python3 stack57237963.py <CREATE ID=123>
bash: syntax error near unexpected token `newline'
我对bash
不太了解,无法理解此错误。
这是我希望bash
进行的拆分:
2337:~/mypy$ python3 stack57237963.py CREATE ID=123
['stack57237963.py', 'CREATE', 'ID=123']
usage: stack57237963.py [-h] option
stack57237963.py: error: unrecognized arguments: ID=123
该行产生错误。
parser.add_argument('<CREATE ID=>', '--option', help="Best option name here.")
Traceback (most recent call last):
File "stack57237963.py", line 6, in <module>
parser.add_argument('<CREATE ID=>', '--option', help="Best option name here.")
File "/usr/lib/python3.6/argparse.py", line 1333, in add_argument
kwargs = self._get_optional_kwargs(*args, **kwargs)
File "/usr/lib/python3.6/argparse.py", line 1464, in _get_optional_kwargs
raise ValueError(msg % args)
ValueError: invalid option string '<CREATE ID=>': must start with a character '-'
使用--option
可以告诉argparse
这是一个optional
,带有标记的参数。 因此,它期望另一个参数都具有标志前缀“-”。
我可以删除'--option':
parser.add_argument('<CREATE ID=>', help="Best option name here.")
在这种情况下,它将字符串作为参数dest
:
Namespace(option='ID=123', **{'<CREATE ID=>': 'CREATE'})
add_argument
的第一个参数必须是可选的标志字符串(以'-'开头)或参数dest
(对于位置)。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.