在一个项目中,我看到以下用途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?谢谢!
我希望我的脚本能够接收这些互斥的输入选项:
script.py -i input.json;script.py '{"a":1}';echo '{"a":1}' | script.py来自 stdin(或)的 JSON cat input.json | script.py。以及这些互斥的输出选项:
所以我尝试使用这段代码
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) 我正在使用 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)
现在,我只想“显示此帮助消息”,而不是“退出”。那么我该怎么办呢?
我想在帮助文本中保留换行符并显示参数的默认值。
我在 Stackoverflow 找到了两个答案:
如何启用这两个功能?
我有一个 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) 让我们想象一下,我有一个带有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: ...,但似乎只在值本身而不是最终列表上调用,所以我想我不能使用它来过滤值?
尝试使用 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)
错误命名空间参数不可迭代
我认为是因为我传递的参数类型不正确。阅读完所有文档后,我发现我无法弄清楚如何进行这项工作。我希望程序对我传递的数字进行排序。
我有几个不同的输入文件,用案例编号".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) 我试图将一些日期传递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)
我已经尝试使用连字符而不是点作为分隔符,以及"真正的"字符串而不是数字.什么都没有帮助.有任何想法吗?谢谢!
我正在尝试使用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)