getopts在python中表现得很奇怪

时间:2016-07-18 15:14:48

标签: python arguments getopts

我使用getops进行args管理,出于某种原因我的-s变量无效。我的代码如下,以及我得到的输出

try:
  opts, args = getopt.getopt(sys.argv[1:], "hadsp:v", ["help", "all", "display", "single=", "present="])#, "search="])
except getopt.GetoptError as err:
  print(err)
  print "Exiting now, no options entered"
  help()
  sys.exit(2)

if len(opts) == 0:
  print "No options passed"
  help()

print opts
print args

for o, a in opts:
  if o in ("-h", "--help"):
    help()
  elif o in ("-p", "--present"):
    search(a)
  elif o in ("-a", "--all"):
    all_install()
  elif o in ("-s", "--single"):
    if a == '':
      print "crap"
      sys.exit(2)
    single_install(a)
  elif o in ("-d", "--display"):
    display()
  else:
    print "Exiting now, unknown option"
    help()
    sys.exit(2)

输出

[('-s', '')]
['test']
crap

当我运行程序时:

python file.py -s test

不知道为什么会发生这种情况,感谢您的帮助

1 个答案:

答案 0 :(得分:1)

import argparse

argParser = argparse.ArgumentParser()
argParser.add_argument(
        '-p', '--present', dest='present', help='write help here for this parameter')

args = argParser.parse_args()

if args.present:
    search(a)

使用argparse的示例代码,更易于管理和使用 -h(或)--help是argparse

的内置选项

如果您想使用getopt,请参阅解析选项的文档

https://docs.python.org/2/library/getopt.html

>>> import getopt
>>> args = '-a -b -cfoo -d bar a1 a2'.split()
>>> args
['-a', '-b', '-cfoo', '-d', 'bar', 'a1', 'a2']
>>> optlist, args = getopt.getopt(args, 'abc:d:')
>>> optlist
[('-a', ''), ('-b', ''), ('-c', 'foo'), ('-d', 'bar')]
>>> args
['a1', 'a2']