即使有选项,如果没有选项,我也需要加载参数。
#!/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”。因此,请告诉我如何访问该值。
最佳答案
仅根据您的输出,您应该能够看到 parse_args
返回一个元组。该元组的第一个元素是包含已定义选项的值的对象,第二个元素是解析选项后剩余的参数列表。您可以在官方 tutorial 阅读更多相关内容.
考虑到这一点,你可以简单地写
options, arguments = parser.parse_args()
并使用参数
对该列表执行您想要的任何操作。
但是,您的问题似乎是当您提供选项时,参数被解析为选项的值。这是由您定义选项的方式引起的,因为选项 -i
和 -c
需要值。
如果您希望这些选项为 bool 值,则需要手动定义。一个选项代码的示例类似于
# 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)
这也意味着您不需要为该选项提供值,因此当解析器读取选项时不会消耗参数。
如果您希望您的选项是非 bool 值,但又不想证明它们的值,那么我不确定我是否明白您想要做的事情。
关于python - 如果 python 中没有选项,optparse 可以工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24094977/