如果在python中没有选项,optparse将工作

时间:2014-06-07 07:40:50

标签: python linux python-2.7 optparse

即使有选项,如果没有选项,我也需要加载参数。

#!/usr/bin/python
import optparse

parser = optparse.OptionParser()
parser.add_option('-i', dest='name', help='some')
parser.add_option('-c', dest='name', help='some')
parser.add_option('-p', action='store', help='password')

print parser.parse_args()

[root@server tmp]# ./test -i abc
(<Values at 0x4011368: {'p': None, 'name': 'abc'}>, [])
[root@server tmp]# ./test  abc
(<Values at 0x5855368: {'p': None, 'name': None}>, ['abc'])

即使我没有使用任何选项,我也需要值“abc”。所以请告诉我如何获取该值。

2 个答案:

答案 0 :(得分:1)

完全基于您的输出,您应该能够看到parse_args返回一个元组。该元组的第一个元素是包含已定义选项的值的对象,第二个元素是解析选项后剩余的参数列表。您可以在官方tutorial中了解更多相关信息。

考虑到这一点,你可以简单地写

options, arguments = parser.parse_args()

并使用arguments对该列表执行任何操作。

然而,您的问题似乎是当您提供选项时,参数被解析为选项的值。这是由您定义选项的方式引起的,因为选项-i-c需要值。

如果您希望这些选项是布尔值,则需要手动定义。一个选项代码的示例类似于

# This defines an option which set name to True if option is provided, otherwise
# name is set to False
parser.add_option('-i', dest='name', help='some', action="store_true", default=False)

这也意味着您不需要为该选项提供价值,因此当解析器读取选项时,不会消耗参数。

如果您希望自己的选项不是布尔值,但又不想为它们证明价值,那么我不确定我是否会得到您正在尝试做的事情。

答案 1 :(得分:-1)