2017-07-19 49 views
0

我有幾個位置和可選參數(使用argparser),現在需要添加一個標誌,它不接受任何參數/值,本質上調用一個方法。Argparser標誌沒有優先參數

讓我們說這是當前解析器:

./run.py arg1 arg2 -i input 

這裏的簡短示例代碼

parser.add_argument("arg1", 
        help="arg1 handler") 
parser.add_argument("arg2", 
        help="arg2 handler") 
parser.add_argument('-i', dest='input_handler', 
        help="input handler") 

我在尋找什麼,因爲當你使用--help導致顯示的幫助是類似的東西(優先於其他標誌)。 所以我想支持一個特殊的標誌(如--help)而不用擔心在命令行中提供所有其他標誌。

所以這樣的事情應該工作以及:

./run.py --list 

我想用'store_true'拿旗有沒有價值,但它並不比其他標誌的優先級。

任何的意見/建議是非常感謝

+0

如果您還分享了一些代碼,可能會有用。這可能會幫助人們瞭解你想要達到的目標。 – Grimmy

+0

爲什麼你需要優先?你可以解析你的參數,然後檢查'--list'是否存在,然後再對其他參數進行操作。 – zwer

+0

我想讓'./run.py --list'工作。與'./run --help'類似,它不需要任何其他標誌/參數。如果我沒有提供所有其他論點,argparser會抱怨缺少論據。 – Mahyar

回答

0

您可以使用soemthing這樣的:

parser = argparse.ArgumentParser() 
parser.add_argument('--list',action='store_true',help='perform some task') 
parser.add_argument('--input',type=str, required=False, help='input variable') 

args = parser.parse_args() 

if args.list: 
    perform_function() 
elif args.input is not None: 
    function(args.input) 
... 
0

你缺少nargs領域。

#!/usr/bin/env python 
"""Runs using two args and an option input 

Usage: ./run.py arg1 arg2 -i input 

Arguments: 
    arg1/arg2: any order 

Options: 
    -i input 
""" 
import argparse 

parser = argparse.ArgumentParser(usage=__doc__) 
parser.add_argument("pos_args", help="Unknown pos args sequence", nargs=2) # '+' for any number of args 
parser.add_argument('-i', dest='input_handler', help="input handler") 

args = parser.parse_args() 

arg1, arg2 = args.pos_args 
+0

你真的嘗試過嗎? 'nargs =「2」'可能會引發某種錯誤,無論是創建,解析還是顯示幫助。 – hpaulj

+0

修正:不要在需要整數的地方使用引號。 –

0

-h help優先,因爲遇到時會強制sys.exit。也就是說,它有一個Action類打印幫助然後退出。

有一個類似的version動作類 - 顯示消息並退出。

所有其他操作都會在args命名空間中存儲某些內容,並繼續解析。 missing arguments投訴是在解析結束時產生的,當它推斷某些位置(或其他必需的)參數未被填充時。

我能想到的幾個解決方案:

  • 定義爲藍本helpversion一個新的Action的子類。如果你走這條路,你應該做這個發展,所以你知道到底發生了什麼。

  • 將您的位置更改爲可選項。 nargs='?'是可能的,但是標記更好。在這種情況下,input_handler可能是一個簡單的store_true操作。

  • 使用子分析器。 input_handler將是不帶參數的解析器。其他分析師將採取2個定位。查看子分析器文檔和set_defaults註釋。