Optparse,旧版本只是忽略了所有无法识别的参数并继续.在大多数情况下,这并不理想,并且在argparse中已更改.但是在某些情况下,您希望忽略任何无法识别的参数并解析您指定的参数.
例如:
parser = argparse.ArgumentParser()
parser.add_argument('--foo', dest="foo")
parser.parse_args()
$python myscript.py --foo 1 --bar 2
error: unrecognized arguments: --bar
Run Code Online (Sandbox Code Playgroud)
反正有没有覆盖这个?
鉴于:
import argparse
pa = argparse.ArgumentParser()
pa.add_argument('--foo')
pa.add_argument('--bar')
print pa.parse_args('--foo 1'.split())
Run Code Online (Sandbox Code Playgroud)
我如何能
--foo x,--bar y并且--foo x --bar y是精--foo x或者--bar y很好,--foo x --bar y不是我想有一个可选参数,如果只有标志存在而没有指定值,则默认为一个值,但是如果用户指定了值,则存储用户指定的值而不是默认值.是否已有针对此的行动?
一个例子:
python script.py --example
# args.example would equal a default value of 1
python script.py --example 2
# args.example would equal a default value of 2
Run Code Online (Sandbox Code Playgroud)
我可以创建一个动作,但想知道是否有现成的方法来执行此操作.
我用了创建了一个脚本argparse.
脚本需要将配置文件名作为选项,用户可以指定是否需要完全继续脚本或仅模拟脚本.
要通过的args:./script -f config_file -s或./script -f config_file.
对于-f config_file部分是可以的,但是它一直在问我-s的参数是哪个是选项,不应该是任何参数.
我试过这个:
parser = argparse.ArgumentParser()
parser.add_argument('-f', '--file')
#parser.add_argument('-s', '--simulate', nargs = '0')
args = parser.parse_args()
if args.file:
config_file = args.file
if args.set_in_prod:
simulate = True
else:
pass
Run Code Online (Sandbox Code Playgroud)
出现以下错误:
File "/usr/local/lib/python2.6/dist-packages/argparse.py", line 2169, in _get_nargs_pattern
nargs_pattern = '(-*%s-*)' % '-*'.join('A' * nargs)
TypeError: can't multiply sequence by non-int of type 'str'
Run Code Online (Sandbox Code Playgroud)
与错误相同''而不是0.
我认为这一定很容易,但我不明白.
假设我有以下arparse解析器:
import argparse
parser = argparse.ArgumentParser( version='pyargparsetest 1.0' )
subparsers = parser.add_subparsers(help='commands')
# all
all_parser = subparsers.add_parser('all', help='process all apps')
# app
app_parser = subparsers.add_parser('app', help='process a single app')
app_parser.add_argument('appname', action='store', help='name of app to process')
Run Code Online (Sandbox Code Playgroud)
我怎样才能确定使用了哪个subparser?电话:
print parser.parse_args(["all"])
Run Code Online (Sandbox Code Playgroud)
给我一个空命名空间:
Namespace()
Run Code Online (Sandbox Code Playgroud) 我有一个使用argparse库的Python模块.如何为代码库的该部分编写测试?
标题几乎总结了我想要发生的事情.
这就是我所拥有的,虽然程序没有在非正整数上爆炸,但我希望用户被告知非正整数基本上是无意义的.
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("-g", "--games", type=int, default=162,
help="The number of games to simulate")
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)
并输出:
python simulate_many.py -g 20
Setting up...
Playing games...
....................
Run Code Online (Sandbox Code Playgroud)
输出带否定:
python simulate_many.py -g -2
Setting up...
Playing games...
Run Code Online (Sandbox Code Playgroud)
现在,显然我可以添加一个if来确定if args.games是否定的,但我很好奇是否有办法将它陷入argparse水平,以便利用自动使用打印.
理想情况下,它会打印类似于此的内容:
python simulate_many.py -g a
usage: simulate_many.py [-h] [-g GAMES] [-d] [-l LEAGUE]
simulate_many.py: error: argument -g/--games: invalid int value: 'a'
Run Code Online (Sandbox Code Playgroud)
像这样:
python simulate_many.py -g -2
usage: simulate_many.py [-h] [-g GAMES] [-d] [-l LEAGUE]
simulate_many.py: …Run Code Online (Sandbox Code Playgroud) 我想在argparse模块中有一些选项,--pm-export但是当我尝试使用它时,args.pm-export我得到的错误是没有属性pm.我该如何解决这个问题?是否可以使用-命令行选项?
当我使用python argparse的子命令时,我可以得到所选的参数.
parser = argparse.ArgumentParser()
parser.add_argument('-g', '--global')
subparsers = parser.add_subparsers()
foo_parser = subparsers.add_parser('foo')
foo_parser.add_argument('-c', '--count')
bar_parser = subparsers.add_parser('bar')
args = parser.parse_args(['-g, 'xyz', 'foo', '--count', '42'])
# args => Namespace(global='xyz', count='42')
Run Code Online (Sandbox Code Playgroud)
所以args不包含'foo'.sys.argv[1]由于可能的全局参数,简单编写不起作用.如何获取子命令本身?
是否可以在python中添加一个Argument argparse.ArgumentParser而不显示在usage或help(script.py --help)中?