簡體   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