我试图编写一个python脚本,可以回显运行脚本时用户输入的内容
现在,我的代码是(version_msg和usage_msg现在不重要)
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 options.py -e hello world),它只会回复[' hello']。我将如何解决此问题,以便输出[' hello',' world']?
答案 0 :(得分:2)
在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
用于指定Action占用的字符串数。 '+'表示一个或多个。结果收集在列表中。它模拟了正则表达式使用的nargs
值(例如'?'和'*'也有效)。
In [248]: parser.print_help()
usage: ipython3 [-h] [-e ECHO [ECHO ...]]
optional arguments:
-h, --help show this help message and exit
-e ECHO [ECHO ...], --echo ECHO [ECHO ...]
查看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
本身。
答案 1 :(得分:1)
这种做法略显苛刻:
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)
然后我跑
python myscript.py -e hello world how are you
输出:
['hello', 'world', 'how', 'are', 'you']
答案 2 :(得分:0)
我认为这最好通过引用这个论点来实现,即你好世界变成了“你好世界”。这可以确保-e选项使用整个字符串。 如果你真的需要将字符串分解成碎片,即[&#39;你好&#39;,&#39;世界&#39;]而不是[&#39; hello world&#39;]你可以轻松地调用split ()关于options.e [0]
strings = options.e[0].split()
对于更复杂的方法,您可以使用回调,在下面链接到您的相关示例。
https://docs.python.org/3/library/optparse.html#callback-example-6-variable-arguments