繁体   English   中英

如何使用argparse以xml格式传递参数?

[英]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.

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