An extension of argparse to facilitate passing on arguments to other programs
Project description
argpass
An argparse extension to collect and pass on command line arguments (potentially starting with hyphens) to other programs.
TL;DR:
Imagine writing a wrapper script that calls two or more other programs. In many cases, you will want to collect command line arguments for these programs and pass them on unaltered. Using argparse, this is not possible. With argpass
, simply pass nargs=argpass.NargsOption.COLLECT_UNTIL_NEXT_KNOWN
to parser.add_argument
and it will collect all strings (regardless of format) until the next known argument.
Installation
Install with
pip install argpass
Motivation
Built-in argparse lacks an option to ignore unrecognized flag strings (usually starting with -
or --
), which makes it difficult to collect arguments and pass them on to other programs in some cases. It can be done with ArgumentParser.parse_known_args
(see docs) which collects all unrecognized arguments, but this only works when just one other program is invoked from our script. Collecting arguments starting with dashes to pass on to more than one program is impossible with argparse, which as caused quite some frustration.
An example
Consider the following example: We have a Python script that takes an input file, a regular argument, and other arguments that should be passed on to another program which is invoked from within our script. We would call our script as follows:
python script.py --file example.txt --regular-arg exampleArg --args-to-pass-on --param1 val1 --param2 val2
Thanks to ArgumentParser.parse_known_args
, this case can be handled by argparse just fine:
$ cat script.py
import argparse
parser = argparse.ArgumentParser()
parser.add_argument("--file")
parser.add_argument("--regular-arg")
parser.add_argument("--args-to-pass-on", nargs="*")
args, unknown = parser.parse_known_args()
args.args_to_pass_on = unknown
print(args)
$ python script.py --file example.txt --regular-arg exampleArg --args-to-pass-on --param1 val1 --param2 val2
Namespace(file='example.txt', regular_arg='exampleArg', args_to_pass_on=['--param1', 'val1', '--param2', 'val2'])
However, this approach only works when we want to collect arguments for just a single program. Doing something like
python script.py \
--file example.txt --regular-arg exampleArg \
--args-to-pass-on-1 --param1 val1 --param2 val2 \
--args-to-pass-on-2 bla --param3 val3 --blu
cannot be achieved with argparse.
argpass
is a thin wrapper around argparse that allows you to do exactly that. When adding another paramater to the parser, simply specify nargs=NargsOption.COLLECT_UNTIL_NEXT_KNOWN
and argpass
will collect all strings until the next known argument:
$ cat script.py
import argpass
parser = argpass.ArgumentParser()
parser.add_argument("--file")
parser.add_argument("--regular-arg")
parser.add_argument(
"--args-to-pass-on-1", nargs=argpass.NargsOption.COLLECT_UNTIL_NEXT_KNOWN
)
parser.add_argument(
"--args-to-pass-on-2", nargs=argpass.NargsOption.COLLECT_UNTIL_NEXT_KNOWN
)
print(parser.parse_args())
$ python script.py \
--file example.txt --regular-arg exampleArg \
--args-to-pass-on-1 --param1 val1 --param2 val2 \
--args-to-pass-on-2 bla --param3 val3 --blu
Namespace(file='example.txt', regular_arg='exampleArg', args_to_pass_on_1=['--param1', 'val1', '--param2', 'val2'], args_to_pass_on_2=['bla', '--param3', 'val3', '--blu'])
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file argpass-0.0.2.tar.gz
.
File metadata
- Download URL: argpass-0.0.2.tar.gz
- Upload date:
- Size: 4.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.0 CPython/3.10.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 9814a06a38cddc513f55026409f8ad2cb66ddf78573b2e8dffb463561b069f39 |
|
MD5 | 490d2125339517a1b27883c6548ffc6d |
|
BLAKE2b-256 | 592fcc4e8ab1d00e729391be2b229029cb335ae28bce9afef4732a255121b54f |
File details
Details for the file argpass-0.0.2-py3-none-any.whl
.
File metadata
- Download URL: argpass-0.0.2-py3-none-any.whl
- Upload date:
- Size: 4.7 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/4.0.0 CPython/3.10.4
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 0804449cfd90005892f148cfb9a20f9065d848460f5228aa48a98e6c82597ee8 |
|
MD5 | df1dddabe206cd6e7a3358da45c1609c |
|
BLAKE2b-256 | 7f9c43fee4ddf8896e0e5ddb43687f458aacf101275e397e6b8d087d6db00c04 |