有没有一种方法可以控制在Python argparse中评估参数的顺序

Dputhier

让我们来看下面的例子。解析器包含两个参数-inputfile和verbosity。Set_verbosity_level()函数用于将模块级/全局变量(在我的现实生活中为程序包级变量)的值控制为0-4。CheckFile()函数在输入文件内部执行测试(实际情况取决于类型)。我想根据详细程度在CheckFile()中打印消息。问题在于argparse在Set_verbosity_level()之前调用CheckFile(),因此详细程度级别始终为0 /默认值在CheckFile中...

所以我的问题是是否有任何方法可以迫使argparse先评估一些论点...

    import argparse

    VERBOSITY = 0


    def Set_verbosity_level():
        """Set the verbosity level.
        """

        def type_func(value):
            a_value = int(value)
            globals()['VERBOSITY'] = value
            print("Verbosity inside Set_verbosity_level(): " + str(globals()['VERBOSITY']))
            return value

        return type_func


    class CheckFile(argparse.FileType):
        """
        Check whatever in the file
        """

        def __init__(self, mode='r', **kwargs):
            super(CheckFile, self).__init__(mode, **kwargs)

        def __call__(self, string):
            # Do whatever processing/checking/transformation
            # e.g print some message according to verbosity
            print("Verbosity inside  CheckFile(): " + str(globals()['VERBOSITY']))
            return super(CheckFile, self).__call__(string)


    def make_parser():
        """The main argument parser."""
        parser = argparse.ArgumentParser(add_help=True)

        parser.add_argument("-V",
                            "--verbosity",
                            default=0,
                            type=Set_verbosity_level(),
                            help="Increase output verbosity.",
                            required=False)

        parser.add_argument('-i', '--inputfile',
                            help="Input file",
                            type=CheckFile(mode='r'),
                            required=True)

        return parser


    if __name__ == '__main__':
        myparser = make_parser()
        args = myparser.parse_args()
        print("Verbosity in Main: " + str(VERBOSITY))

调用此脚本将得到:

$python test.py -i test.bed -V 2
Verbosity inside  CheckFile(): 0
Verbosity inside Set_verbosity_level(): 2
Verbosity in Main: 2
理查德·斯托菲尔

我不知道您可以强制首先读取argparse变量,但可以在主要功能中使用命令行解析器中内置的python:

import sys

# Your classes here #

if __name__ == '__main__':
    verbosity = 0
    for i, sysarg in enumerate(sys.argv):
        if str(sysarg).strip().lower().replace('-','') in ['v', 'verbose']:
            try:
                verbosity = sys.argv[i + 1]
            except IndexError:
                print("No verbosity level specified")
    # more code

它不是很优雅,也不是argparse,但这是确保首先获得详细信息的一种方法。

您也可以更新您的CheckFile类以包括详细检查功能:

class CheckFile(argparse.FileType):
    """
    Check whatever in the file
    """

    def __init__(self, mode='r', **kwargs):
        super(CheckFile, self).__init__(mode, **kwargs)

    def _check_verbosity(self):
        verbosity = 0
        for i, sysarg in enumerate(sys.argv):
            if str(sysarg).strip().lower().replace('-','') in ['v', 'verbose']:
                try:
                verbosity = sys.argv[i + 1]
            except IndexError:
                print("No verbosity level specified")

        return verbosity

    def __call__(self, string):
        # Do whatever processing/checking/transformation
        # e.g print some message according to verbosity
        print("Verbosity inside  CheckFile(): {}".format(self._check_verbosity()))
        return super(CheckFile, self).__call__(string)

同样,我知道这并不是您的argparse问题的真正答案,但这是您的问题的解决方案

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有一种方法可以控制JPA级联删除顺序?

来自分类Dev

有没有一种方法可以控制JPA级联删除顺序?

来自分类Dev

有没有一种方法可以按照它们定义的顺序来获取argparse的参数?

来自分类Dev

有没有一种方法可以按照它们定义的顺序来获取argparse的参数?

来自分类Dev

有没有一种方法可以控制线性呼叫顺序中的承诺流?

来自分类Dev

有没有一种方法可以在Python中禁用数组边界检查?

来自分类Dev

有没有一种方法可以检查函数是否在python中是递归的?

来自分类Dev

有没有一种方法可以在Windows上的python中运行命令?

来自分类Dev

有没有一种方法可以比较python中枚举的内容?

来自分类Dev

有没有一种方法可以在Python中实现全局计算属性?

来自分类Dev

有没有一种方法可以加快python中的嵌套for循环?

来自分类Dev

有没有一种方法可以在python库pywhatkit中定义变量?

来自分类Dev

有没有一种方法可以简化Python中的“循环” /“循环”交互?

来自分类Dev

有没有一种方法可以在Python中为文本着色?

来自分类Dev

Cucumber-JUnit,有没有一种方法可以控制@before和@after标记的运行顺序

来自分类Dev

有没有一种方法可以在执行控制器操作之前访问Laravel路由参数?

来自分类Dev

有没有一种方法可以在Julia中反转元组的顺序?

来自分类Dev

有没有一种方法可以在linq查询中参数化方法?

来自分类Dev

有没有一种方法可以在Interface Builder中控制leftViewMode(UITextFieldViewMode)和leftView?

来自分类Dev

蜂窝网络中的RLC协议。有没有一种方法可以控制应用内使用的模式?

来自分类Dev

有没有一种方法可以在Linux中循环执行控制台命令?

来自分类Dev

有没有一种方法可以在控制器中检测到reload:true?

来自分类Dev

有没有一种方法可以控制JavaFX 8中的菜单弹出位置?

来自分类Dev

有没有一种方法可以使用WebAudio API中的ConvolverNode控制混响大小?

来自分类Dev

蜂窝网络中的RLC协议。有没有一种方法可以控制应用内使用的模式?

来自分类Dev

有没有一种方法可以将class方法作为python中的关键参数(sort / min / ..)?

来自分类Dev

有没有一种方法可以重用fmt.Printf中的参数?

来自分类Dev

有没有一种方法可以保存带有参数的函数调用?

来自分类Dev

有没有一种方法可以保存带有参数的函数调用?

Related 相关文章

  1. 1

    有没有一种方法可以控制JPA级联删除顺序?

  2. 2

    有没有一种方法可以控制JPA级联删除顺序?

  3. 3

    有没有一种方法可以按照它们定义的顺序来获取argparse的参数?

  4. 4

    有没有一种方法可以按照它们定义的顺序来获取argparse的参数?

  5. 5

    有没有一种方法可以控制线性呼叫顺序中的承诺流?

  6. 6

    有没有一种方法可以在Python中禁用数组边界检查?

  7. 7

    有没有一种方法可以检查函数是否在python中是递归的?

  8. 8

    有没有一种方法可以在Windows上的python中运行命令?

  9. 9

    有没有一种方法可以比较python中枚举的内容?

  10. 10

    有没有一种方法可以在Python中实现全局计算属性?

  11. 11

    有没有一种方法可以加快python中的嵌套for循环?

  12. 12

    有没有一种方法可以在python库pywhatkit中定义变量?

  13. 13

    有没有一种方法可以简化Python中的“循环” /“循环”交互?

  14. 14

    有没有一种方法可以在Python中为文本着色?

  15. 15

    Cucumber-JUnit,有没有一种方法可以控制@before和@after标记的运行顺序

  16. 16

    有没有一种方法可以在执行控制器操作之前访问Laravel路由参数?

  17. 17

    有没有一种方法可以在Julia中反转元组的顺序?

  18. 18

    有没有一种方法可以在linq查询中参数化方法?

  19. 19

    有没有一种方法可以在Interface Builder中控制leftViewMode(UITextFieldViewMode)和leftView?

  20. 20

    蜂窝网络中的RLC协议。有没有一种方法可以控制应用内使用的模式?

  21. 21

    有没有一种方法可以在Linux中循环执行控制台命令?

  22. 22

    有没有一种方法可以在控制器中检测到reload:true?

  23. 23

    有没有一种方法可以控制JavaFX 8中的菜单弹出位置?

  24. 24

    有没有一种方法可以使用WebAudio API中的ConvolverNode控制混响大小?

  25. 25

    蜂窝网络中的RLC协议。有没有一种方法可以控制应用内使用的模式?

  26. 26

    有没有一种方法可以将class方法作为python中的关键参数(sort / min / ..)?

  27. 27

    有没有一种方法可以重用fmt.Printf中的参数?

  28. 28

    有没有一种方法可以保存带有参数的函数调用?

  29. 29

    有没有一种方法可以保存带有参数的函数调用?

热门标签

归档