【问题标题】:Python Parse Arguments if Flag not provided如果未提供标志,则 Python 解析参数
【发布时间】:2021-02-08 16:28:56
【问题描述】:

我已配置以下选项:

parser.add_argument('-f', '--files', dest='files', nargs='*', metavar='', default=sys.stdin,
                    help='File List to Search In')

运行时效果很好:

% script.py -f file1 file2 .... 

但我也想支持不带-f 标志的执行

意思:

% script.py file1 file2 ...

我尝试使用位置参数来做到这一点,但它是强制性的,并且即使在命令中引入-f 也会继续干扰。

澄清: 我得到了额外的解析参数,这意味着有时可以执行

% script.py -m -g -r -f file1 file2 .... 所以我看不出使用 sys.argv[1:] 对我有什么帮助。

我特别需要选择何时不写入 -f 而写入文件名。

【问题讨论】:

    标签: python command-line-arguments argparse


    【解决方案1】:

    您可以使用sys.argv 访问终端参数

    script.py:

    import sys
    
    
    if __name__ == '__main__':
        print(sys.argv[1:]
    

    然后运行:

    % python script.py file1 file2
    

    输出

    ['file1', 'file2']
    

    【讨论】:

    • 只有当我没有其他参数时它才会起作用。就我而言,我得到了几个参数,每个参数都带有一个标志 -f -t -r 等......所以 argv[] 不起作用
    • 然后使用 argparse
    • 这就是我正在做的...请再次阅读我的问题
    • 澄清了我的问题
    【解决方案2】:

    通过定义另一个定位参数来修复它

    parser.add_argument('-f', '--files', dest='files', nargs='+', metavar='', help='要搜索的文件列表') parser.add_argument(dest='files2', nargs='*', metavar='', default=False)

    并将“False”作为默认值传递,以防它没有值。

    然后我只是简单地检查一下

    如果 args.files2: 文件列表 = args.files2 别的: file_list = args.files

    这样,file_list 将包含文件名,无论它来自定位参数还是 -f 参数。

    【讨论】:

      猜你喜欢
      • 2020-09-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-04-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-04-05
      相关资源
      最近更新 更多