2016-08-16 7 views
0

Я закончил писать скрипт на python и теперь застрял в интерфейсе, который требует получения нескольких параметров от пользователя, но не уверен, что лучший способ получить дополнительные аргументы. код, который, как показано ниже ...Python getopt/optparse необязательная обработка параметров командной строки

def getOptions(argv): 
     try: 
      opts,args = getopt.getopt(argv, "hi:c:d:m", ["ifile=", "add=", "delete"]) 
     except getopt.GetoptError: 
      printUsage() 
      sys.exit(2) 
     for opt, arg in opts: 
      if opt in ("-h", "--help"): 
       print ("test -m <make> [src] [dst]\n") 
       print ("test -i <install>[filename] \n") 
       ..... 
       sys.exit() 
      if opt in ("-m", "--make"): 
       make(arg) 
       sys.exit() 
      if opt in ("-i","--install"): 
       install(arg) 
       sys.exit() 
      ... # few more options 
      else: 
       assert False, "unhandled option" 

Мой вопрос заключается в том, что как я могу оставить из аргумента (например, использовать дополнительный путь по умолчанию для арг), и если это не предусмотрено, получить от пользователя ?? В настоящее время я имею обеспечить ./test -i как я могу выйти из имени файла и назвать как ./test -i
Я застрял с таким же вопросом еще один раз, моя среда разработки Python 2.6 и из-за ограничений, теперь используя optparse, но с той же проблемой, я должен поддерживать необязательный аргумент и не мог найти способ, как это сделать, кроме синтаксического анализа sys.argv вручную, у меня есть почти 10 различных параметров, и если я могу обрабатывать один необязательный аргумент, мой скрипт будет намного удобнее для конечных пользователей.

ответ

1

От: https://docs.python.org/2/library/getopt.html Getopts не поддерживает необязательные аргументы.

Можете ли вы попробовать написать свой код, используя argparse? Ниже приведен пример:

import argparse 
parser = argparse.ArgumentParser(description='python cli') 
parser.add_argument("-m", "--make", help="execute make", required=True) 
parser.add_argument("-i", "--install", help="execute install", required=True) 

# parse input arguments 
args = parser.parse_args() 

makeVal = args.make 
shouldInstall = args.install 

if makeVal : 
    make(makeVal) 
... 

Ссылка: https://docs.python.org/2.7/library/argparse.html