2012-04-24 80 views
1

此代碼的Python:允許位置參數進行最後指定或者它在幫助輸出先寫使用argparse

import argparse 

parser = argparse.ArgumentParser() 

parser.add_argument('target', help='Specifiy who to attack!') 

magic = ['fireball', 'heal', 'microwave'] 
parser.add_argument('-m', '--magic', nargs='*', 
        choices=magic, 
        help=('Magic')) 
parsed_arguments = parser.parse_args() 

時可獲得該幫助輸出

usage: Example.py [-h] 
        [-m [{fireball,heal,microwave} [{fireball,heal,microwave} ...]]] 
        target 

positional arguments: 
    target    Specifiy who to attack! 

optional arguments: 
    -h, --help   show this help message and exit 
    -m [{fireball,heal,microwave} [{fireball,heal,microwave} ...]], --magic [{fireball,heal,microwave} [{fireball,heal,microwave} ...]] 
         Magic 

我想幫助輸出令人困惑,並使它看起來應該是最後指定的目標,但不起作用:python example.py -m fireball troll給出argument -m/--magic: invalid choice: 'troll'

我意識到語言的語法變得模糊不清,但仍然有可能說出句子troll中最後一個詞應該存在一個詞(目標)不是-m選項的參數。

問題:

  1. 有沒有辦法讓沒有argparse毆打多少最後指定的位置參數?
  2. 有沒有辦法讓argparse幫助輸出表明應該首先指定目標?
+2

POSIX系統的一個常見做法是使用'--'來表示選項的結束。例如:'command -m something somethingelse - target' – mensi 2012-04-24 10:39:59

+0

謝謝!這真的很有用,而且確實是'-m火球 - 巨魔'的作品。我仍然希望解答OP中的問題。我想2是最重要的,因爲我認爲它對命令的用戶很有價值。 – Deleted 2012-04-24 11:04:07

回答

1

正如之前在評論中提到的,POSIX系統上標準方法的結束標記是將參數和選項分開--

至於第二個問題:您可能必須創建自己的HelpFormatter來實現此目的,請參閱formatter-class。您可能能夠從默認格式化程序繼承並僅覆蓋生成使用行的必要功能。

相關問題