我有一个具有两个主要功能的脚本:升级和配置。我使用子解析器来指示脚本执行的操作,但我想避免将它们一起使用。
这是代码片段:
import argparse
def main():
parser = argparse.ArgumentParser()
subparser = parser.add_subparsers(help='sub-command help')
parser.add_argument('--user', '-u', help='User', default=None, required=True)
parser.add_argument('--password', '-p', help='Password', default=None, required=True)
parser.add_argument('--server', '-s', help='server with Admin functionality', default=None, required=True)
subparser_prov = subparser.add_parser('provision', help='Provision new managers')
subparser_prov.set_defaults(which='provision')
subparser_upgr = subparser.add_parser('upgrade', help='Upgrade worker by replacing them')
subparser_upgr.set_defaults(which='upgrade')
subparser_upgr.add_argument('--version', help='Deployment version', default=None)
args = vars(parser.parse_args())
print args['user']
print args['password']
if args['which'] == 'provision':
print 'Provisioning new environment!'
elif args['which'] == 'upgrade':
print 'Upgrading workers! %s' % args['version']
if __name__ == "__main__": …Run Code Online (Sandbox Code Playgroud) 我在 python 脚本中使用一个简单的 argparse 函数:
def get_args():
"""Get CLI arguments and options"""
parser = argparse.ArgumentParser(description='AngioTool File Analyzer',
formatter_class=argparse.ArgumentDefaultsHelpFormatter)
parser.add_argument('rootPath',
help="path to files for the experiment",
action=FullPaths, type=is_dir)
parser.add_argument('-c', help='string to specify the control device to which all devices should be ratioed', default='D1')
parser.add_argument('-p', help="list of fields to plot",
default=['Total Vessels Length', 'Total Number of End Points', 'Total Number of Junctions'])
parser.add_argument('-i', help='string to specify first interval', default='min')
parser.add_argument('-t', help='comma serperated list with chart titles to be placed on charts', default="Chart …Run Code Online (Sandbox Code Playgroud) 我在使用 argparse 时遇到问题。使用下面的代码,我期望 args.dir 是一个字符串,但我得到了一个数组。我怎样才能得到一个字符串?有人可以帮忙吗?
#!/usr/bin/env python3
import sys
import argparse
#import mysql.connector
# Set version number
version = '1.0.0'
# Parse arguments supplied on the commandline
argparser = argparse.ArgumentParser(description=sys.argv[0])
argparser.add_argument('dir', nargs=1, type=str, help='directory to view')
args = argparser.parse_args()
# Print program name and version number to stdout
print(argparser.prog + " v" + version)
print('Creating index for: ' + args.dir[0])
Run Code Online (Sandbox Code Playgroud) 我有一个程序需要有一个选项来测试服务器 ID 列表或对服务器发出命令。这意味着,如果我发出--test,则不需要其他任何东西。它对每台服务器运行全部测试并打印结果。
但是,如果我不指定--test,那么它应该需要一些选项,例如--id和--command。
但是,我不确定是否argparse可以处理互斥组中所需的选项。代码(为简单起见进行了修改)如下。我已经修改了这些选项,因此如果您指定-a,那么您应该可以开始,并且不需要其他选项。
import argparse
parser = argparse.ArgumentParser()
test_or_not = parser.add_mutually_exclusive_group(required=True)
test_or_not.add_argument('-a', action='store_true')
or_not = test_or_not.add_argument_group()
target = or_not.add_mutually_exclusive_group(required=True)
target.add_argument('-b',action="store_true")
target.add_argument('-c',action="store_true")
target.add_argument('-d',action="store_true")
target.add_argument('-e',action="store_true")
group = or_not.add_mutually_exclusive_group(required=True)
group.add_argument('-f',action="store_true")
group.add_argument('-g',action="store_true")
or_not.add_argument('-i',action="store_true")
or_not.add_argument('-j',action="store_true")
or_not.add_argument('-k',action="store_true")
or_not.add_argument('-l',action="store_true")
args = parser.parse_args()
Run Code Online (Sandbox Code Playgroud)
产生结果错误的原因argparse是仍然需要单独的选项,即使它们位于互斥的组中。有没有一种方法argparse可以适应这组选项,或者我是否需要在之外添加一些编程argparse?
$ python3 ~/tmp/groups.py -a
usage: groups.py [-h] -a (-b | -c | -d | -e) (-f | -g) [-i] [-j] [-k] [-l] …Run Code Online (Sandbox Code Playgroud) 我尝试在 google colab上运行我的代码。error: unrecognized arguments但当我尝试调用此函数时,我收到此消息 ( ):
def parse_opts():
parser = argparse.ArgumentParser()
parser.add_argument(
'--root_path',
default='/root/data/ActivityNet',
type=str,
help='Root directory path of data')
parser.add_argument(
'--video_path',
default='video_kinetics_jpg',
type=str,
help='Directory path of Videos')
args = parser.parse_args()
return args
Run Code Online (Sandbox Code Playgroud)
但这失败了,我收到此错误
tester_video.py:错误:无法识别的参数:cifar_comp_20_200_0.01_0.1 20 10 0.01 0.1
我尝试使用Easydict但它似乎不起作用
我正在尝试为我的 argparse 模块编写单元测试用例。然而,测试并没有按预期进行。我的代码如下:
import argparse
def create_parser():
PARSER = argparse.ArgumentParser(prog='traffic_problem_one', \
orbit2_traffic_speed', description='Geek Trust traffic problem', \
allow_abbrev=False)
PARSER.add_argument('Climate', metavar='--climate', action='store', type=str, help='Climate condition')
PARSER.add_argument('Orbit1', metavar='--orbit1', action='store', type=int, help='Orbit 1 traffic speed')
PARSER.add_argument('Orbit2', metavar='--orbit2', action='store', type=int, help='Orbit 2 traffic speed')
return PARSER
PARSER = create_parser()
ARGS = PARSER.parse_args()
input = [ARGS.Climate, ARGS.Orbit1, ARGS.Orbit2]
Run Code Online (Sandbox Code Playgroud)
对应的测试文件如下:
import sys
import os
sys.path.append(os.path.dirname(__file__)+"/../")
from src.main import *
from unittest import TestCase
class CommandLineTestCase(TestCase):
"""
Base TestCase class, sets up a CLI parser
"""
@classmethod …Run Code Online (Sandbox Code Playgroud) 我需要使用 argparse 从命令行接受可变数量的字符串,但是当我传递零个参数时,我得到一个字符串作为结果,而不是一个字符串的列表。
argparser = argparse.ArgumentParser()
argparser.add_argument(
'--example',
nargs='*',
default='default_value',
type=str)
args = argparser.parse_args()
for e in args.example:
print(e)
Run Code Online (Sandbox Code Playgroud)
执行此操作时python program --example first_arg second_arg我得到预期结果:
first_arg
second_arg
Run Code Online (Sandbox Code Playgroud)
即使只有一个参数,一切都很好,但是执行这个python program我得到:
d
e
f
a
u
l
t
_
v
a
l
u
e
Run Code Online (Sandbox Code Playgroud)
我需要迭代列表而不考虑它有多少元素,我该如何解决这个问题?先感谢您。
我将 argparse 与 Python 2.7 一起使用,我想用它来RawTextHelpFormatter获取 Epilog 中的换行符
并 ArgumentDefaultsHelpFormatter获取默认帮助中显示的默认值。
例如,如果 ArgumentParser 的 Epilog 部分是:
epilog="first line\n second line"
Run Code Online (Sandbox Code Playgroud)
并且有争论:
epilog="first line\n second line"
Run Code Online (Sandbox Code Playgroud)
帮助输出应该是:
-d, --development Build development code (default: False)
-p, --production Build production release (default: False)
first line
second line
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点?
我想使用一些选项从命令行运行我的 python 程序。例如,假设我的程序有 4 种模式,我希望通过为其提供以下参数来使用模式 2:
$ python main.py --mode 2
Run Code Online (Sandbox Code Playgroud)
(模式 1、3、4 也类似)。如何使用 argparse 实现此目的?
Python 'argparse' 在新行上显示长命名参数的帮助文本:
**#script.py -h
Select one of the options given
optional arguments:
-h, --help show this help message and exit
-bs , --business_service
choose the service << New line
-so , --service_offering
-ci , --cmdb_ci provide configuration item
-desc , --description
write description << New line
Run Code Online (Sandbox Code Playgroud)
下面是我正在使用的代码:
self.parser = argparse.ArgumentParser(
description='Select one of the options given',
epilog=self._get_usage(),
formatter_class=argparse.RawTextHelpFormatter
)
self.parser.add_argument('-bs','--business_service',type=str,help='choose the service',metavar='')
self.parser.add_argument('-so','--service_offering',type=str,metavar='')
self.parser.add_argument('-ci','--mdcb_ci',type=str,help='provide configuration item',metavar='')
self.parser.add_argument('-desc','--description',type=str,help='write description',metavar='')
Run Code Online (Sandbox Code Playgroud)
我希望帮助字符串位于参数的同一行:
-bs , --business_service choose the service << Same line
Run Code Online (Sandbox Code Playgroud)
我该如何解决?