使用optparse或argparse使用同一选项处理多个参数

2024-05-29 01:37:15 发布

您现在位置:Python中文网/ 问答频道 /正文

我试图编写一个python脚本,它可以响应用户在运行脚本时输入的任何内容

现在,我的代码是(版本和用法现在不重要)

from optparse import OptionParser 

version_msg = ""
usage_msg = ""
parser = OptionParser(version=version_msg, usage=usage_msg)
parser.add_option("-e", "--echo", action="append", dest="input_lines", default=[])

但是如果我尝试运行脚本(python选项.py-e hello world),它只回响了['hello']。我该如何解决这个问题,让它输出['hello','world']?在


Tags: 代码用户from版本脚本parser内容hello
3条回答

我认为这最好通过引用参数来实现,即hello world变为'hello world',这可以确保-e选项消耗整个字符串。 如果您真的需要将字符串拆分为多个部分,例如['hello','world']而不是['hello world'],您可以轻松地对options.e[0]调用split()

strings = options.e[0].split()

对于更复杂的方法,您可以使用回调,下面的链接指向您的相关示例。在

https://docs.python.org/3/library/optparse.html#callback-example-6-variable-arguments

argparse中,这非常简单,它的nargs参数:

In [245]: parser = argparse.ArgumentParser()
In [246]: parser.add_argument('-e',' echo', nargs='+');
In [247]: parser.parse_args(['-e','hello','world'])
Out[247]: Namespace(echo=['hello', 'world'])

nargs用于指定操作执行的字符串数。'+'是指一个或多个。结果收集在一个列表中。它对regex用法的nargs值建模(例如“?”和“*”也可以)。在

^{pr2}$

查看optparse文档,我看到一个nargs参数,但它必须是一个数字。对于变量数,我们必须使用callback,如中所述:

https://docs.python.org/2/library/optparse.html#callback-example-6-variable-arguments

使用本节中定义的函数:

In [266]: parser = optparse.OptionParser()
In [267]: parser.add_option('-e',' echo', dest='echo', action='callback', callback=vararg_callback);

In [268]: parser.parse_args(['-e','hello','world'])
Out[268]: (<Values at 0x7f0ff208a5c0: {'echo': ['hello', 'world']}>, [])

argparse中,nargs='+'收集下一个或{}的值,但该分配是由主解析例程自上而下完成的,而不是为option本身定义的回调。在

一种略显老套的方法:

from optparse import OptionParser

version_msg = ""
usage_msg = ""
parser = OptionParser(version=version_msg, usage=usage_msg)
parser.add_option("-e", " echo", action="append", dest="input_lines", default=[])

options, arguments = parser.parse_args()

print(options.input_lines + arguments)

然后我就跑

^{pr2}$

输出:

['hello', 'world', 'how', 'are', 'you']

相关问题 更多 >

    热门问题