Как я могу построить интерфейс командной строки, в котором есть операторы с argparse? - PullRequest
0 голосов
/ 25 февраля 2019

Как мне построить следующее с помощью argparse:

Краткое содержание: python3 program.py [операция] [опции] target

Операции: установить, удалить, обновить или удалить (вы выбираете один).

Я хочу, чтобы операции имели собственный набор параметров.Я не ищу конкретный код, просто общее руководство.

Ответы [ 2 ]

0 голосов
/ 25 февраля 2019

Вот как я делаю для аналогичных требований, однако это может быть очень простой метод и начальный уровень:Пример (getopt):

#!/usr/bin/python
import sys, getopt
def main(argv):
   arg=''
   try:
      opts, args = getopt.getopt(argv,"i:u:r:",["install=","update=","remove="])
   except getopt.GetoptError:
      print('test.py -i <myinput>')
      sys.exit(2)
   for opt, arg in opts:
      if opt in ("-i", "--install"):
         #Your operation
         print('installing something based on my input',arg)
         sys.exit()
      elif opt in ("-u", "--update"):
         #Your operation
         print('updating something based on my input',arg)
         sys.exit()
      elif opt in ("-r", "--remove"):
         #Your operation
         print('removing something based on my input',arg)
         sys.exit()  

if __name__ == "__main__":
   main(sys.argv[1:])

Ссылка: Ссылка

Использование:

python test.py -i myinput

Вывод:

installing something based on my input myinput
0 голосов
/ 25 февраля 2019

Звучит так, как вы хотите subparsers.Бит dest='subparser_name' позволяет определить, какой подпарсер был вызван.

import argparse

parser = argparse.ArgumentParser()
subparsers = parser.add_subparsers(dest='subparser_name')
install_parser = subparsers.add_parser('install')
install_parser.add_argument('target')
subparsers.add_parser('uninstall')

print(parser.parse_args(['uninstall']))
print(parser.parse_args(['install', 'target=foo']))
print(parser.parse_args(['uninstall', 'install', 'target=foo']))

Вывод:

Namespace(subparser_name='uninstall')
Namespace(subparser_name='install', target='target=foo')
usage: test.py [-h] {install,uninstall} ...
test.py: error: unrecognized arguments: install target=foo
...