你有沒有試圖接受這個選項可變數量的值?也就是說,使用'rawinput'來設置nargs
,然後用它來解析命令行?
的optparse
文檔具有使用自定義回調處理可變數目的值的示例:
https://docs.python.org/2/library/optparse.html#callback-example-6-variable-arguments
,在另一方面,確實允許可變數目的值的,與nargs
值喜歡 '?' (0或1),'+'(1或更多),'*'(0或更多)。
因爲我更熟悉我就勾勒出一個互動腳本來處理您的修改後的要求:
import argparse
parser = argparse.ArgumentParser(prog='PROG')
parser.add_argument('-c', '--categories', nargs='+', help='4 categories', default=[])
args = parser.parse_args()
print(args)
categories = args.categories
while len(categories)<4:
print(parser.format_usage())
x = raw_input('enter %s categories: '%(4-len(categories))).split()
categories.extend(x)
print('categories', categories)
如果「類別」是唯一的參數,你可以替換所有的東西(或optparse
)與categories = sys.argv[1:]
或[2:]
如果您仍然期望'-c'
標誌。
或者用optparse
(改編自用於可變長度回調的文檔的例子):
def vararg_callback(option, opt_str, value, parser):
value = []
for arg in parser.rargs:
# stop on --foo like options
if arg[:2] == "--" and len(arg) > 2:
break
# stop on -a (ignore the floats issue)
if arg[:1] == "-" and len(arg) > 1:
break
value.append(arg)
del parser.rargs[:len(value)]
setattr(parser.values, option.dest, value)
def use_opt():
import optparse
parser = optparse.OptionParser()
parser.add_option('-c','--categories', dest='categories', action="callback", callback=vararg_callback)
(options, args) = parser.parse_args()
print options, args
return options, args, parser
args, rest, parser = use_opt()
對方回答表明您'nargs'既是可變輸入到'add_option'命令,和它返回的對象的屬性。將'rawinput'轉換爲'int'並將其值應用到任一位置。但你爲什麼要這樣做? – hpaulj
通常'optparse'用於處理用戶給予腳本的第一件事情 - 命令行值。聽起來像你問用戶進一步的輸入,然後解析命令行。你不願意通過命令行獲得所有的用戶輸入嗎? – hpaulj