我在使用Python v2.7的模塊時遇到了一些麻煩。 基本上,我擁有的是與5個強制變量工作的腳本:argparse - 使用特定參數重現「--help」參數的行爲
- 網址
- 方法
- 登錄
- 密碼
- 輸出
語法的例子看起來像這樣:
script.py -w/- url [URL] -m/- 方法[METHOD] -l/- login [LOGIN] -p/- password [PASSWORD] -o/- output [OUTPUT ]
我想要做的是這樣的:
- 添加一個可選的參數
-t/--test
- 其行爲將是,基於與
-w/--url
參數中使用URL,它會繞過完全是-m/--method
,-l/--login
和-p/--password
的論點,但它的工作,我需要告訴停止處理參數,如果提供-t/--test
(但僅限於-w/--url
)。
這種行爲甚至可能嗎?我試圖玩子命令,但它似乎(至少對我的小知識)有點矯枉過正。
注:這是我原來的代碼:
# Description : parses script arguments
# Argument(s) : all
# Return value : all arguments values
def testArgs():
parser = argparse.ArgumentParser(description='Foo', formatter_class=argparse.RawDescriptionHelpFormatter)
parser.add_argument('-w','--url', help='URL', required=True)
parser.add_argument('-t','--test', help='Test command', action='store_true')
parser.add_argument('-m','--method', help='METHOD', required=True)
parser.add_argument('-u','--login_name', help='LOGIN', required=True)
parser.add_argument('-p','--login_password', help='PASSWORD', required=True)
parser.add_argument('-o','--output_format', help='OUTPUT', required=True, choices=['json', 'yaml', 'python'], default='json')
args = parser.parse_args()
return args
編輯:大量的測試後,我所管理的以下內容:
def testArgs():
parser = argparse.ArgumentParser(description='DESCRIPTION')
subparsers = parser.add_subparsers()
p_list = subparsers.add_parser('test', help='List all available methods')
p_list.add_argument('-w', help='URL', required=True)
p_list.add_argument('-t', help='Test', action='store_true', required=True)
p_cmd = subparsers.add_parser('cmd', help='Executes command')
p_cmd.add_argument('-w', help='URL', required=True)
p_cmd.add_argument('-m', help='Method', required=True)
p_cmd.add_argument('-l', help='Login', required=True)
p_cmd.add_argument('-p', help='Password', required=True)
p_cmd.add_argument('-o', help='Output', required=True)
args = parser.parse_args()
return args
表現出以下行爲:
$ python testArgparse.py -h
usage: testArgeparse.py [-h] {test,cmd} ...
DESCRIPTION
positional arguments:
{test,cmd}
test Lists all available methods
cmd Executes command
optional arguments:
-h, --help show this help message and exit
但對別人的論點訪問幫助,我需要做到以下幾點:
$ python testArgparse.py test -h
usage: testArgparse.py test [-h] -w W -t
optional arguments:
-h, --help show this help message and exit
-w W URL
-t Test
$ python testArgparse.py cmd -h
usage: testArgparse.py cmd [-h] -w W -m M -l L -p P -o O
optional arguments:
-h, --help show this help message and exit
-w W URL
-m M Method
-l L Login
-p P Password
-o O Output
我想是可以的,至少,所有參數的顯示幫助,而不必使用--help
兩個test
和cmd
的論點。
理想情況下,我想是這樣的行爲:
$ python testArgparse.py [-w URL -t] | [-w URL -m METHOD -u LOGIN -p PASS -o OUTPUT]
當你看到''-t/- test''時,忽略其他參數 –
向第一條評論添加了原始代碼。 – iceman94
您應該簽出[互斥組合](http://docs.python.org/dev/library/argparse.html#mutual-exclusion)。你可以讓一個參數或另一個參數是必需的,但不能同時存在。不過,您可能必須做一些技巧才能擁有1 *或* 3組。 – SethMMorton