Estoy usando argparse con subparsers para hacer diferentes acciones. Cada acción tiene argumentos ligeramente diferentes.

Lo configuré como lo indican las documentaciones, con una acción en el subparser (parser_2) y el otro subparser (parser_3) cuando ayudo en el uso de cada uno, dice los parámetros correctos

Esto es para 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

esto es para 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

sin embargo, cuando realmente ejecuto los comandos obtengo errores de uso: para clsiss que se ejecuta desde la línea de comandos:

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'

para cdf (que se ejecuta desde la línea de comandos):

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'

por favor ayuda, estoy usando los argumentos correctos y el número de argumentos, pero no puedo averiguar por qué el uso es incorrecto cuando realmente intento ejecutarlo

Todavía recibo el mismo error, aquí está el código completo, no puedo resolverlo. Por favor ayuda

#!/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()
0
G J 3 nov. 2019 a las 22:59

1 respuesta

La mejor respuesta

Con copiar y pegar su código:

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

No entiendo tus errores:

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

Sus errores, más o menos:

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'
0
hpaulj 3 nov. 2019 a las 21:03