2012-06-11 31 views
5

我有一個有大量潛在參數的程序。 它基本上允許用戶在一個非常小的數據庫中的任何表get/set/delete/list。每列都有一個可以傳遞的參數。
這不是主界面,只是偶爾有用的管理界面。如何在Python中將交互式提示與argparse結合起來?

無論如何,如果用戶想要在表格中插入一行,他必須知道所有列的名稱。雖然從幫助中很容易看出 - 這也是一個令人頭痛的問題。

因此,我更改了代碼,以便用戶可以傳遞--prompt選項,程序將提示他們輸入與它們指定的表關聯的每個列名稱。但我的問題是,我現在需要在兩個地方複製我的輸入約束(選項,類型等) - argparse和此提示函數。

  • 問題1:有沒有更好的方法來做到這一點?
  • 問題2:有沒有一種乾淨的方式來引用argparse約束?
  • 問題3:是否有任何庫推薦作爲組合命令行參數,選項和提示的替代品?

感謝

回答

3

這樣做,這將是自定義操作的典型方式。你可以有這樣的argparse選項和輸入用相同的函數進行驗證。

#!/usr/bin/env python3 

import argparse 


class ColumnsAction(argparse.Action): 
    def __call__(self, parser, namespace, value, option_string=None): 
     self.validate(parser, value) 
     setattr(namespace, self.dest, value) 

    @staticmethod 
    def validate(parser, value): 
     if value not in ('foo', 'bar'): 
      parser.error('{} not valid column'.format(value)) 


parser = argparse.ArgumentParser() 
parser.add_argument('--columns', action=ColumnsAction) 
args = parser.parse_args() 
if args.columns is None: 
    args.columns = input('Enter columns: ') 
    ColumnsAction.validate(parser, args.columns) 
print(args.columns) 
相關問題