【问题标题】:[Python argparse]set the behaviour of an argument to be interactive if no value is given[Python argparse]如果没有给出值,则将参数的行为设置为交互式
【发布时间】:2015-04-09 07:43:49
【问题描述】:

我想知道是否可以根据是否给出值来改变参数的行为。

通常,我想提供一种交互式方式来输入密码。

示例用法:

$script.py => 使用参数'p'的默认参数值

$script.py -p mypass => 使用 'mypass' 作为 'p' 的值

$script.py -p => 以交互方式获取密码

【问题讨论】:

    标签: python default-value argparse interactive


    【解决方案1】:
    import argparse
    
    parser = argparse.ArgumentParser()
    parser.add_argument("-p", nargs='?', const="mypass", default="default")
    
    args = parser.parse_args()
    
    if args.p:
        print args.p
    

    然后您可以检查 p 的值并以交互方式获取密码

    【讨论】:

      【解决方案2】:

      一个简单的类:

      class AskUser:
          def __init__(self, type, func, *args, **kwargs):
              self.type = type
              self.func = func
              self.args = args
              self.kwargs = kwargs
          def __call__(self, value):
              if value == '':
                  value = self.func(*self.args, **self.kwargs)
              return self.type(value)
      

      你可以直接插入到 argparse 中:

      parser = argparse.ArgumentParser()
      parser.add_argument('user', nargs='?', type=AskUser(str, input, 'Enter user name: '), default='')
      parser.add_argument('file', nargs='?', type=AskUser(Path, filedialog.asksaveasfilename,
          title='Select a file', filetypes=(('CSV files', '*.csv'),), defaultextension='.csv'), default='')
      args = parser.parse_args()
      

      【讨论】:

      • AskUser 来自哪里?
      猜你喜欢
      • 2016-11-25
      • 2012-12-30
      • 1970-01-01
      • 2018-01-22
      • 1970-01-01
      • 2012-08-31
      • 1970-01-01
      • 1970-01-01
      • 2021-07-30
      相关资源
      最近更新 更多