Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/mercurial/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法清除python argparse?_Python_Argparse - Fatal编程技术网

有没有办法清除python argparse?

有没有办法清除python argparse?,python,argparse,Python,Argparse,考虑以下脚本: import argparse parser1 = argparse.ArgumentParser() parser1.add_argument('-a') args1 = parser1.parse_args() parser2 = argparse.ArgumentParser() parser2.add_argument('-b') args2 = parser2.parse_args() 我有几个问题: parse_args是一次性方法还是有办法清除 添加新参数之前的

考虑以下脚本:

import argparse
parser1 = argparse.ArgumentParser()
parser1.add_argument('-a')
args1 = parser1.parse_args()

parser2 = argparse.ArgumentParser()
parser2.add_argument('-b')
args2 = parser2.parse_args()
我有几个问题:

  • parse_args是一次性方法还是有办法清除 添加新参数之前的参数?(例如
    args1.clear()
    parser1.clear()
  • 此脚本的结果不可用。虽然这个脚本接受
    -a
    参数,它不接受“a”的任何值。也不是 接受任何
    -b
    参数。有没有办法让这些论点真正起作用
  • 这是我的实际场景:我有两个脚本。两者进口相同 包含初始化代码的文件(加载配置文件,创建 让我们将其命名为init.py。这个init.py文件也会解析它 这些参数只是因为它需要其中的一个值。问题 我需要一个脚本来接受其他参数。 由于init.py只使用一个参数执行某些操作,因此我不能等待 解析参数。我怎样才能让它工作
  • 编辑:

    以下是我的脚本的输出:

    [提示]#python2.7 myscript.py-a

    用法:a.py[-h][-a]

    myscript.py:错误:参数-a:应为一个参数

    [提示]#python2.7 myscript.py-a 1

    名称空间(a='1')

    用法:a.py[-h][-b]

    myscript.py:错误:无法识别的参数:-a 1

  • 这并没有真正意义,因为无论出于何种目的,解析器对象都是无状态的。没有什么需要澄清的,因为它所做的只是接收控制台参数,并返回一个
    名称空间
    对象(伪dict),而不需要修改过程中的任何内容

    因此,可以考虑<代码> PARSEIGARSH()/<代码>是幂等的。您可以反复调用它,同样的输出也会出现。默认情况下,它将从存储控制台参数的

    sys.argv
    读取参数

    但是,请注意,您可以通过向
    parse_args
    函数传递一个列表来导入自定义参数,以便解析器将使用除
    sys.argv
    之外的其他内容作为输入

  • 我不知道你的意思。如果调用
    python myscript.py-a 15
    args1
    将等于
    名称空间(a='15')
    。然后可以执行
    args1['a']
    以获得15的值。如果要使标志充当切换,请调用
    parser.add_参数('-a',action='store_true')
    。以下是所有可用操作的列表

  • 我将尝试将所有控制台/接口代码限制在单个模块和单个解析器中。基本上,将代码从init.py和第二个文件中删除,以将命令行解析为一个独立的小部分。一旦运行解析器(它为程序中的所有内容提供了统一的接口),将适当的变量传递给
    init.py
    中的函数。这样做的另一个好处是保持UI的独立性,并且更容易与代码的其余部分互换

  • 这并没有真正意义,因为无论出于何种目的,解析器对象都是无状态的。没有什么需要澄清的,因为它所做的只是接收控制台参数,并返回一个
    名称空间
    对象(伪dict),而不需要修改过程中的任何内容

    因此,可以考虑<代码> PARSEIGARSH()/<代码>是幂等的。您可以反复调用它,同样的输出也会出现。默认情况下,它将从存储控制台参数的

    sys.argv
    读取参数

    但是,请注意,您可以通过向
    parse_args
    函数传递一个列表来导入自定义参数,以便解析器将使用除
    sys.argv
    之外的其他内容作为输入

  • 我不知道你的意思。如果调用
    python myscript.py-a 15
    args1
    将等于
    名称空间(a='15')
    。然后可以执行
    args1['a']
    以获得15的值。如果要使标志充当切换,请调用
    parser.add_参数('-a',action='store_true')
    。以下是所有可用操作的列表

  • 我将尝试将所有控制台/接口代码限制在单个模块和单个解析器中。基本上,将代码从init.py和第二个文件中删除,以将命令行解析为一个独立的小部分。一旦运行解析器(它为程序中的所有内容提供了统一的接口),将适当的变量传递给
    init.py
    中的函数。这样做的另一个好处是保持UI的独立性,并且更容易与代码的其余部分互换


  • 你的情况很不清楚,但我想你要找的是

    在这里,我猜您从其他文件调用了
    init.py
    ,比如
    caller1.py
    caller2.py

    还假设
    init.py
    只解析
    -a
    参数,而原始脚本将解析其余的参数

    您可以这样做:

    init.py
    中,将其放入
    dou things
    方法:

    parser = argparse.ArgumentParser()
    parser.add_argument('-a')
    parsed = parser.parse_known_args(sys.argv)
    print 'From init.py: %s' % parsed['a']
    
    在调用方1.py中:

    init.do_things(sys.argv)
    parser = argparse.ArgumentParser()
    parser.add_argument('-b')
    parsed = parser.parse_known_args(sys.argv)
    print 'From caller1.py: %s' % parsed['b']
    
    如果按如下方式调用
    caller1.py
    python caller1.py-a foo-b bar
    ,结果将是:

    From init.py: foo
    From caller1.py: bar
    

    但是如果您的场景实际上不是这样,我建议使用@Michael0x2a answer,这只是在
    caller1.py
    中使用单个
    ArgumentParser
    对象,并为
    init.py

    适当地传递值。您的场景非常不清楚,但我猜您正在寻找的是

    在这里,我猜您从其他文件调用了
    init.py
    ,比如
    caller1.py
    caller2.py

    还假设
    init.py
    只解析
    -a
    参数,而原始脚本将解析其余的参数

    您可以这样做:

    init.py中
    将其放入
    do\u thin中