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