标签: argparse

Python argparse , add_argument, type = <some function> 而不是 int ?

在一个项目中,我看到以下用途add_argument()

parser = argparse.ArgumentParser()
parser.add_argument("--somearg",type=make_arg_instance,help='blahblahblah')
args = parser.parse_args()
i = args.somearg.somefunction()
Run Code Online (Sandbox Code Playgroud)

其中make_arg_instance是一个函数,定义为:

def make_arg_instance():
    somearg = SomeClassName()
    return somearg
Run Code Online (Sandbox Code Playgroud)

看来参数 'somearg' 是一个class对象而不是int,这就是为什么后来调用一个方法,如i = args.somearg.somefunction().

在我见过的大多数教程中,参数的类型始终是int,因此有人可以解释一下如何添加类型class或除 之外的任何类型的参数吗int?谢谢!

python argparse

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

Python argparse 与 stdin 互斥是选项之一

我希望我的脚本能够接收这些互斥的输入选项:

  • 包含 JSON ( ) 的输入文件script.py -i input.json
  • 包含 JSON ( ) 的字符串script.py '{"a":1}'
  • echo '{"a":1}' | script.py来自 stdin(或)的 JSON cat input.json | script.py

以及这些互斥的输出选项

  • 包含 JSON 的输出文件;
  • 标准输出中的 JSON。

所以我尝试使用这段代码

import json,sys,argparse
parser = argparse.ArgumentParser(description='Template for python script managing JSON as input/output format')

group = parser.add_mutually_exclusive_group()
group.add_argument('--input-file', '-i',  type=str, help='Input file name containing a valid JSON.', default=sys.stdin)
group.add_argument('json',    nargs='?',  type=str, help='Input string containing a valid JSON.' , default=sys.stdin)
parser.add_argument('--output-file', …
Run Code Online (Sandbox Code Playgroud)

python json stdin argparse python-3.x

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

python argparse 如何在 [-h] 命令之后继续程序?

我正在使用 argparse 编写解释器。并面临一个问题。

while True:
    cmd = input('>>>')
    parser = argparse.ArgumentParser()
    parser.add_argument('-f', help='foo')
    parser.parse_args(cmd.split())
Run Code Online (Sandbox Code Playgroud)

当我输入 [-h] 命令时,它会退出程序。

>>>-h
usage: test.py [-h] [-f F]

optional arguments:
-h, --help  show this help message and exit
-f F        foo
Run Code Online (Sandbox Code Playgroud)

现在,我只想“显示此帮助消息”,而不是“退出”。那么我该怎么办呢?

python argparse

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

Python argparse:显示默认值并保留换行符?

我想在帮助文本中保留换行符并显示参数的默认值。

我在 Stackoverflow 找到了两个答案:

如何启用这两个功能?

python argparse

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

使用 argparse 允许未知参数

我有一个 python 脚本,需要用户输入两个参数才能运行它,参数可以命名为任何名称。

我还使用 argparse 来允许用户使用开关“-h”来获取运行脚本所需的说明。

问题是,现在我已经使用了 argparse,当我通过脚本传递两个随机命名的参数时,出现错误。

import argparse

parser = argparse.ArgumentParser(add_help=False)

parser.add_argument('-h', '--help', action='help',
                    help='To run this script please provide two arguments')
parser.parse_args()
Run Code Online (Sandbox Code Playgroud)

目前,当我运行python test.py arg1 arg2时,错误是

error: unrecognized arguments: arg1 arg2
Run Code Online (Sandbox Code Playgroud)

我希望代码允许用户在需要查看说明时使用 -h 运行 test.py,但也允许他们使用任意两个参数运行脚本。

带有帮助标记的解析,为用户提供有关所需参数的上下文。

   parser = argparse.ArgumentParser(add_help=False)

    parser.add_argument('-h', '--help', action='help', help='To run this script please provide two arguments: first argument should be your scorm package name, second argument should be your html file name. Note: Any current zipped folder in the run …
Run Code Online (Sandbox Code Playgroud)

python argparse python-3.x

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

如何在 argparse 中过滤 nargs 参数列表?

让我们想象一下,我有一个带有nargs="*"名为 的参数的CLI --list。我想过滤掉这个列表中的某些元素。

例如,如果用户传入,--list foo bar foo baz我想过滤掉所有内容values == "foo",以便最终列表变为["bar", "baz"]

parser = argparse.ArgumentParser()
parser.add_argument(
    "--list",
    nargs="*",
)
parser.parse_args(["--list", "foo", "bar", "foo", "baz"])
Run Code Online (Sandbox Code Playgroud)

我显然可以在结果参数的后处理步骤中解决这个问题。然而我想知道 argparse 中是否有一个内置机制允许实现这样的过滤器而无需后期处理。

我尝试使用type=lambda: ...,但似乎只在值本身而不是最终列表上调用,所以我想我不能使用它来过滤值?

python argparse

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

“命名空间”对象不可迭代

尝试使用 argparse 传递不确定数量的整数。当我输入:py main.py 3 2

    %%writefile main.py

import sorthelper
import argparse


integers = 0

#top-level parser creation
parser = argparse.ArgumentParser("For sorting integers")

nargs = '+' #-> gathers cmd line arguments into a list
args = parser.add_argument('-f', metavar='N', type=int, nargs='+', help='yada yada yada')

args = parser.parse_args()

print(sorthelper.sortNumbers(args))


%%writefile sorthelper.py

def sortNumbers(args):
    sorted(args)
Run Code Online (Sandbox Code Playgroud)

错误命名空间参数不可迭代

我认为是因为我传递的参数类型不正确。阅读完所有文档后,我发现我无法弄清楚如何进行这项工作。我希望程序对我传递的数字进行排序。

python python-module argparse python-3.x

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

使用argparse选项指定类型和模式

我有几个不同的输入文件,用案例编号".1",".2"等保存,以区分它们.我正在构建一个操作这些文件的脚本,我想使用argparse来允许用户指定要操作的特定案例编号,或者使用"_"来指定最后保存的案例(即输入文件与最大的病例数).就像是;

> ls 
   file.1, file.2, file.3
> my_script.py 2
   (operates on file.2)
> my_script.py _
   (operate on file.3)
Run Code Online (Sandbox Code Playgroud)

有没有办法可以指定"任何整数"作为一个选择而"_"作为第二选择?就像是;

parser = argparse.ArgumentParser()
parser.add_argument('case', choices=[anyint, '_'])
Run Code Online (Sandbox Code Playgroud)

python argparse

0
推荐指数
1
解决办法
1795
查看次数

Argparse:无法识别的论点

我试图将一些日期传递argparse给我的脚本,但不知何故它总是产生以下错误:

error: unrecognized arguments: -startdate -enddate -timeofday
Run Code Online (Sandbox Code Playgroud)

我的代码如下:

import argparse

parser = argparse.ArgumentParser(description='This program downloads webcam images')
parser.add_argument('?startdate', type=str, help='startdate given as:dd.mm.YYYY')
parser.add_argument('?enddate', type=str, help='enddate given as:dd.mm.YYYY')
parser.add_argument('?timeofday', type=str, help='time of day as:"HH:MM"')
args = parser.parse_args()
print args.startdate
print args.enddate
Run Code Online (Sandbox Code Playgroud)

我已经尝试使用连字符而不是点作为分隔符,以及"真正的"字符串而不是数字.什么都没有帮助.有任何想法吗?谢谢!

python argparse

0
推荐指数
1
解决办法
4586
查看次数

通过argparse python从cfg文件动态设置默认值

我正在尝试使用argparse模块.我正在处理2个配置文件:
1.default cfg文件2.用户提供的文件.

如果在运行时未提供文件,请从默认文件中读取.如果用户提供文件,请使用提供的文件的内容.

我的问题是:我想default为每个提供字段parser.add_agument,所以如果它不是由用户提供的,它将始终具有一些默认值.可以从任一文件(即默认或用户指定的文件)中读取这些值.我需要检查提供的文件然后from default/user-given-file import *

我的代码:
get_args.py

class GetArgs:
   def get_args(self):
       parser = argparse.ArgumentParser(description='foo')
       #
       parser.add_argument(
        '-c', '--config', type=str, help='Provide a file', 
                          required=False, default='settings.cfg')
         #now note that below "default=version" will be from either "settings.cfg" or "user given file"

         # here may be i need to import from file ? 
        parser.add_argument(
        '-v','--version', type=str, help='API version', required=False, default=version)
        args = parser.parse_args()

        # Assign args to variables
        config=args.config
        version = args.version
        retutn config,version …
Run Code Online (Sandbox Code Playgroud)

python python-2.7 argparse

0
推荐指数
1
解决办法
1119
查看次数

标签 统计

argparse ×10

python ×10

python-3.x ×3

json ×1

python-2.7 ×1

python-module ×1

stdin ×1