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
Epilogo#
[13]:
parser = argparse.ArgumentParser(
description="A foo that bars",
epilog="And that's how you'd foo a bar",
)
parser.print_help()
usage: ipykernel_launcher.py [-h]
A foo that bars
optional arguments:
-h, --help show this help message and exit
And that's how you'd foo a bar
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')