Argparse с подпарсерами не работает, и я не могу понять это - PullRequest
0 голосов
/ 03 ноября 2019

Я использую argparse с подпарсерами для выполнения различных действий. Каждое действие имеет несколько разные аргументы.

Я настроил его, как указано в документации, с одним действием в подпарагере (parser_2) и другом подпапере (parser_3), когда я помогаю в использовании каждого из них. он говорит правильные параметры

Это для cdf:

positional arguments:
  repo                  name the repo to perform tasks on

optional arguments:
  -h, --help            show this help message and exit
  --state {open,closed}
                        Print issues in a repository having status of
                        all(default), open, or closed

Это для clsiss:

usage: subparsprob.py clsiss [-h] repo issnums [issnums ...]

positional arguments:
  repo        name the repo to perform tasks on
  issnums     put the issue number(s) separated by blank

optional arguments:
  -h, --help  show this help message and exit

однако, когда я фактически запускаю командыя получаю ошибки использования: для clsiss, выполняющегося из командной строки:

PS C:\xxx> python subparsprob.py clsiss repo 1
usage: subparsprob.py clsiss [-h] repo issnums [issnums ...]
subparsprob.py clsiss: error: argument issnums: invalid int value: 'repo'

для cdf (выполняется из командной строки):

PS C:\xxx> python subparsprob.py cdf repo
usage: subparsprob.py clsiss [-h] repo issnums [issnums ...]
subparsprob.py clsiss: error: argument issnums: invalid int value: 'repo'

, пожалуйста, помогите, я использую правильные аргументы и номераргумента, но не могу понять, почему использование неправильно, когда я на самом деле пытаюсь запустить его

Я все еще получаю ту же ошибку, вот весь код, я не могу понять это. Пожалуйста, помогите

#!/usr/bin/python3
import argparse
import sys
import os
argv = sys.argv[1:]
# from issueGithub import IssueGithub, Taskname
def main():
   parser=argparse.ArgumentParser(description='Invoke various github 
   actions')
   subparsers = parser.add_subparsers(help='sub-commands for Github 
   options',dest='action_name')
   parser_2 =subparsers.add_parser('clsiss',help='close issues')
   parser_2.add_argument('repo',type=str,help="name the repo to perform 
   tasks 
   on")
   parser_2.add_argument('issnums',type=int,nargs='+',help="put the issue 
   number(s) separated by blank")
   parser_3 = subparsers.add_parser('cdf',help='create default 
   tasks/issues')
   parser_3.add_argument('repo',type=str,help="name the repo to perform 
   tasks 
   on")
   parser_3.add_argument('--state',choices=['open','closed'], default='all', 
   help='Print issues in a repository
   args = parser.parse_args()
   args2 = parser_2.parse_args()
   args3 = parser_3.parse_args()
   print("Args are")
   print(args)
   print(args2)
   print(args3)
if __name__ =="__main__":
    main()

1 Ответ

0 голосов
/ 04 ноября 2019

С помощью copy-n-paste вашего кода:

1301:~/mypy$ python3 stack58684096.py -h
usage: stack58684096.py [-h] {clsiss,cdf} ...

Invoke various actions

positional arguments:
  {clsiss,cdf}  sub-commands for options
    clsiss      close issues
    cdf         create default tasks/issues

optional arguments:
  -h, --help    show this help message and exit

Я не получаю ваши ошибки:

1302:~/mypy$ python3 stack58684096.py clsiss repo 1
Namespace(action_name='clsiss', issnums=[1], repo='repo')
1302:~/mypy$ python3 stack58684096.py cdf repo
Namespace(action_name='cdf', repo='repo', state='all')

1302:~/mypy$ python3 stack58684096.py clsiss -h
usage: stack58684096.py clsiss [-h] repo issnums [issnums ...]

positional arguments:
  repo        name the repo to perform tasks on
  issnums     put the issue number(s) separated by blank

optional arguments:
  -h, --help  show this help message and exit

Ваши ошибки - вроде:

1302:~/mypy$ python3 stack58684096.py clsiss repo
usage: stack58684096.py clsiss [-h] repo issnums [issnums ...]
stack58684096.py clsiss: error: the following arguments are required: issnums
1304:~/mypy$ python3 stack58684096.py clsiss repo repo
usage: stack58684096.py clsiss [-h] repo issnums [issnums ...]
stack58684096.py clsiss: error: argument issnums: invalid int value: 'repo'
...