Skip to main content

An extension of argparse to facilitate passing on arguments to other programs

Project description

Python tests

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


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

argpass-0.0.2.tar.gz (4.6 kB view details)

Uploaded Source

Built Distribution

argpass-0.0.2-py3-none-any.whl (4.7 kB view details)

Uploaded Python 3

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

Hashes for argpass-0.0.2.tar.gz
Algorithm Hash digest
SHA256 9814a06a38cddc513f55026409f8ad2cb66ddf78573b2e8dffb463561b069f39
MD5 490d2125339517a1b27883c6548ffc6d
BLAKE2b-256 592fcc4e8ab1d00e729391be2b229029cb335ae28bce9afef4732a255121b54f

See more details on using hashes here.

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

Hashes for argpass-0.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 0804449cfd90005892f148cfb9a20f9065d848460f5228aa48a98e6c82597ee8
MD5 df1dddabe206cd6e7a3358da45c1609c
BLAKE2b-256 7f9c43fee4ddf8896e0e5ddb43687f458aacf101275e397e6b8d087d6db00c04

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page