标签: argparse

对于 argparse ,子解析器本质上是互斥的吗?

我有一个具有两个主要功能的脚本:升级和配置。我使用子解析器来指示脚本执行的操作,但我想避免将它们一起使用。

这是代码片段:

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 python-2.7 argparse

3
推荐指数
1
解决办法
5011
查看次数

Argparse 的 GUI

我在 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)

python pyqt argparse python-3.x

3
推荐指数
1
解决办法
4817
查看次数

python argparse 数组而不是 str

我在使用 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)

python argparse

3
推荐指数
1
解决办法
1901
查看次数

argparse 和互斥组,每个组都有自己所需的设置

我有一个程序需要有一个选项来测试服务器 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)

python mutual-exclusion argparse python-3.x

3
推荐指数
1
解决办法
4907
查看次数

错误:无法识别的参数:-colab 中的 pytorch 代码

我尝试在 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 pytorch google-colaboratory

3
推荐指数
1
解决办法
5607
查看次数

使用 Pytest 框架进行 Argparse 测试

我正在尝试为我的 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)

python pytest argparse

3
推荐指数
1
解决办法
3751
查看次数

如何强制 argparse 返回字符串列表?

我需要使用 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)

我需要迭代列表而不考虑它有多少元素,我该如何解决这个问题?先感谢您。

python iterable argparse

3
推荐指数
1
解决办法
2505
查看次数

带有 ArgumentDefaultsHelpFormatter 和 RawTextHelpFormatter 的 Python Argparse

我将 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 argparse

3
推荐指数
1
解决办法
1928
查看次数

Python argparse 与选择

我想使用一些选项从命令行运行我的 python 程序。例如,假设我的程序有 4 种模式,我希望通过为其提供以下参数来使用模式 2:

$ python main.py --mode 2
Run Code Online (Sandbox Code Playgroud)

(模式 1、3、4 也类似)。如何使用 argparse 实现此目的?

python command-line-arguments argparse

3
推荐指数
1
解决办法
5035
查看次数

Python 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)

我该如何解决?

python command-line-arguments argparse

3
推荐指数
1
解决办法
1129
查看次数