Librería argparser (programas de linea de comandos)#

  • Última modificación: Mayo 14, 2022

Ejemplo#

[1]:
%%writefile /tmp/prog.py

import argparse

#
# Creación del parser
#
parser = argparse.ArgumentParser(
    # -------------------------------------------------------------------------
    # Text to display before the argument help
    description="Process some integers.",
    # -------------------------------------------------------------------------
    # The global default value for arguments
    argument_default=None,
)

#
# Adición de argumentos
#
parser.add_argument(
    "integers",
    metavar="N",
    type=int,
    nargs="+",
    help="an integer for the accumulator",
)

parser.add_argument(
    "--sum",
    dest="accumulate",
    action="store_const",
    const=sum,
    default=max,
    help="sum the integers (default: find the max)",
)

args = parser.parse_args()

print(args.accumulate(args.integers))
Overwriting /tmp/prog.py
[2]:
!python3 /tmp/prog.py -h
usage: prog.py [-h] [--sum] N [N ...]

Process some integers.

positional arguments:
  N           an integer for the accumulator

optional arguments:
  -h, --help  show this help message and exit
  --sum       sum the integers (default: find the max)
[3]:
#
# Uso de argumentos
#
!python3 /tmp/prog.py 1 2 3 4
4
[4]:
#
# Uso del flag
#
!python3 /tmp/prog.py 1 2 3 4 --sum
10
[5]:
#
# Uso de argumentos invalidos
#
!python3 /tmp/prog.py a b c
usage: prog.py [-h] [--sum] N [N ...]
prog.py: error: argument N: invalid int value: 'a'

prog#

[6]:
%%writefile /tmp/myprogram.py

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--foo", help="foo help")
args = parser.parse_args()
Overwriting /tmp/myprogram.py
[7]:
!python3 /tmp/myprogram.py --help
usage: myprogram.py [-h] [--foo FOO]

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

Uso dentro de Python#

[8]:
import argparse

parser = argparse.ArgumentParser(prog="myprogram")
parser.print_help()
usage: myprogram [-h]

optional arguments:
  -h, --help  show this help message and exit
[9]:
parser = argparse.ArgumentParser(prog="myprogram")
parser.add_argument("--foo", help="foo of the %(prog)s program")
parser.print_help()
usage: myprogram [-h] [--foo FOO]

optional arguments:
  -h, --help  show this help message and exit
  --foo FOO   foo of the myprogram program

Uso#

[10]:
#
# El mesage es obtenido a partir de los argumentos adicionados
#
parser = argparse.ArgumentParser(prog="PROG")
parser.add_argument("--foo", nargs="?", help="foo help")
parser.add_argument("bar", nargs="+", help="bar help")
parser.print_help()
usage: PROG [-h] [--foo [FOO]] bar [bar ...]

positional arguments:
  bar          bar help

optional arguments:
  -h, --help   show this help message and exit
  --foo [FOO]  foo help
[11]:
#
# Cambio de la cadena usage
#
parser = argparse.ArgumentParser(prog="PROG", usage="%(prog)s [options]")
parser.add_argument("--foo", nargs="?", help="foo help")
parser.add_argument("bar", nargs="+", help="bar help")
parser.print_help()
usage: PROG [options]

positional arguments:
  bar          bar help

optional arguments:
  -h, --help   show this help message and exit
  --foo [FOO]  foo help

Descripción#

[12]:
parser = argparse.ArgumentParser(description="A foo that bars")
parser.print_help()
usage: ipykernel_launcher.py [-h]

A foo that bars

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

Acciones#

[14]:
#
# 'store'
#
parser = argparse.ArgumentParser()
parser.add_argument("--foo")
parser.parse_args("--foo 1".split())
[14]:
Namespace(foo='1')
[15]:
#
# 'store_const'
#
parser = argparse.ArgumentParser()
parser.add_argument("--foo", action="store_const", const=42)
parser.parse_args(["--foo"])
[15]:
Namespace(foo=42)
[16]:
#
# 'store_true' & 'store_false'
#
parser = argparse.ArgumentParser()
parser.add_argument("--foo", action="store_true")
parser.add_argument("--bar", action="store_false")
parser.add_argument("--baz", action="store_false")
parser.parse_args("--foo --bar".split())
[16]:
Namespace(bar=False, baz=True, foo=True)

Parámetro choices#

[17]:
%%writefile /tmp/myprogram.py

import argparse

parser = argparse.ArgumentParser(prog="game.py")
parser.add_argument("move", choices=["rock", "paper", "scissors"])
print(parser.parse_args())
Overwriting /tmp/myprogram.py
[18]:
!python3 /tmp/myprogram.py rock
Namespace(move='rock')
[19]:
!python3 /tmp/myprogram.py fire
usage: game.py [-h] {rock,paper,scissors}
game.py: error: argument move: invalid choice: 'fire' (choose from 'rock', 'paper', 'scissors')

Parámetro required#

[20]:
%%writefile /tmp/myprogram.py

import argparse

parser = argparse.ArgumentParser()
parser.add_argument("--foo", required=True)
print(parser.parse_args())
Overwriting /tmp/myprogram.py
[21]:
!python3 /tmp/myprogram.py --foo BAR
Namespace(foo='BAR')
[22]:
!python3 /tmp/myprogram.py
usage: myprogram.py [-h] --foo FOO
myprogram.py: error: the following arguments are required: --foo

Parámetro dest#

[23]:
%%writefile /tmp/myprogram.py

import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--foo', dest='bar')

print(parser.parse_args())
Overwriting /tmp/myprogram.py
[24]:
!python3 /tmp/myprogram.py --foo XXX
Namespace(bar='XXX')