You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
257 lines
8.2 KiB
257 lines
8.2 KiB
argparse |
|
======== |
|
|
|
[![Build Status](https://secure.travis-ci.org/nodeca/argparse.svg?branch=master)](http://travis-ci.org/nodeca/argparse) |
|
[![NPM version](https://img.shields.io/npm/v/argparse.svg)](https://www.npmjs.org/package/argparse) |
|
|
|
CLI arguments parser for node.js. Javascript port of python's |
|
[argparse](http://docs.python.org/dev/library/argparse.html) module |
|
(original version 3.2). That's a full port, except some very rare options, |
|
recorded in issue tracker. |
|
|
|
**NB. Difference with original.** |
|
|
|
- Method names changed to camelCase. See [generated docs](http://nodeca.github.com/argparse/). |
|
- Use `defaultValue` instead of `default`. |
|
- Use `argparse.Const.REMAINDER` instead of `argparse.REMAINDER`, and |
|
similarly for constant values `OPTIONAL`, `ZERO_OR_MORE`, and `ONE_OR_MORE` |
|
(aliases for `nargs` values `'?'`, `'*'`, `'+'`, respectively), and |
|
`SUPPRESS`. |
|
|
|
|
|
Example |
|
======= |
|
|
|
test.js file: |
|
|
|
```javascript |
|
#!/usr/bin/env node |
|
'use strict'; |
|
|
|
var ArgumentParser = require('../lib/argparse').ArgumentParser; |
|
var parser = new ArgumentParser({ |
|
version: '0.0.1', |
|
addHelp:true, |
|
description: 'Argparse example' |
|
}); |
|
parser.addArgument( |
|
[ '-f', '--foo' ], |
|
{ |
|
help: 'foo bar' |
|
} |
|
); |
|
parser.addArgument( |
|
[ '-b', '--bar' ], |
|
{ |
|
help: 'bar foo' |
|
} |
|
); |
|
parser.addArgument( |
|
'--baz', |
|
{ |
|
help: 'baz bar' |
|
} |
|
); |
|
var args = parser.parseArgs(); |
|
console.dir(args); |
|
``` |
|
|
|
Display help: |
|
|
|
``` |
|
$ ./test.js -h |
|
usage: example.js [-h] [-v] [-f FOO] [-b BAR] [--baz BAZ] |
|
|
|
Argparse example |
|
|
|
Optional arguments: |
|
-h, --help Show this help message and exit. |
|
-v, --version Show program's version number and exit. |
|
-f FOO, --foo FOO foo bar |
|
-b BAR, --bar BAR bar foo |
|
--baz BAZ baz bar |
|
``` |
|
|
|
Parse arguments: |
|
|
|
``` |
|
$ ./test.js -f=3 --bar=4 --baz 5 |
|
{ foo: '3', bar: '4', baz: '5' } |
|
``` |
|
|
|
More [examples](https://github.com/nodeca/argparse/tree/master/examples). |
|
|
|
|
|
ArgumentParser objects |
|
====================== |
|
|
|
``` |
|
new ArgumentParser({parameters hash}); |
|
``` |
|
|
|
Creates a new ArgumentParser object. |
|
|
|
**Supported params:** |
|
|
|
- ```description``` - Text to display before the argument help. |
|
- ```epilog``` - Text to display after the argument help. |
|
- ```addHelp``` - Add a -h/–help option to the parser. (default: true) |
|
- ```argumentDefault``` - Set the global default value for arguments. (default: null) |
|
- ```parents``` - A list of ArgumentParser objects whose arguments should also be included. |
|
- ```prefixChars``` - The set of characters that prefix optional arguments. (default: ‘-‘) |
|
- ```formatterClass``` - A class for customizing the help output. |
|
- ```prog``` - The name of the program (default: `path.basename(process.argv[1])`) |
|
- ```usage``` - The string describing the program usage (default: generated) |
|
- ```conflictHandler``` - Usually unnecessary, defines strategy for resolving conflicting optionals. |
|
|
|
**Not supported yet** |
|
|
|
- ```fromfilePrefixChars``` - The set of characters that prefix files from which additional arguments should be read. |
|
|
|
|
|
Details in [original ArgumentParser guide](http://docs.python.org/dev/library/argparse.html#argumentparser-objects) |
|
|
|
|
|
addArgument() method |
|
==================== |
|
|
|
``` |
|
ArgumentParser.addArgument(name or flag or [name] or [flags...], {options}) |
|
``` |
|
|
|
Defines how a single command-line argument should be parsed. |
|
|
|
- ```name or flag or [name] or [flags...]``` - Either a positional name |
|
(e.g., `'foo'`), a single option (e.g., `'-f'` or `'--foo'`), an array |
|
of a single positional name (e.g., `['foo']`), or an array of options |
|
(e.g., `['-f', '--foo']`). |
|
|
|
Options: |
|
|
|
- ```action``` - The basic type of action to be taken when this argument is encountered at the command line. |
|
- ```nargs```- The number of command-line arguments that should be consumed. |
|
- ```constant``` - A constant value required by some action and nargs selections. |
|
- ```defaultValue``` - The value produced if the argument is absent from the command line. |
|
- ```type``` - The type to which the command-line argument should be converted. |
|
- ```choices``` - A container of the allowable values for the argument. |
|
- ```required``` - Whether or not the command-line option may be omitted (optionals only). |
|
- ```help``` - A brief description of what the argument does. |
|
- ```metavar``` - A name for the argument in usage messages. |
|
- ```dest``` - The name of the attribute to be added to the object returned by parseArgs(). |
|
|
|
Details in [original add_argument guide](http://docs.python.org/dev/library/argparse.html#the-add-argument-method) |
|
|
|
|
|
Action (some details) |
|
================ |
|
|
|
ArgumentParser objects associate command-line arguments with actions. |
|
These actions can do just about anything with the command-line arguments associated |
|
with them, though most actions simply add an attribute to the object returned by |
|
parseArgs(). The action keyword argument specifies how the command-line arguments |
|
should be handled. The supported actions are: |
|
|
|
- ```store``` - Just stores the argument’s value. This is the default action. |
|
- ```storeConst``` - Stores value, specified by the const keyword argument. |
|
(Note that the const keyword argument defaults to the rather unhelpful None.) |
|
The 'storeConst' action is most commonly used with optional arguments, that |
|
specify some sort of flag. |
|
- ```storeTrue``` and ```storeFalse``` - Stores values True and False |
|
respectively. These are special cases of 'storeConst'. |
|
- ```append``` - Stores a list, and appends each argument value to the list. |
|
This is useful to allow an option to be specified multiple times. |
|
- ```appendConst``` - Stores a list, and appends value, specified by the |
|
const keyword argument to the list. (Note, that the const keyword argument defaults |
|
is None.) The 'appendConst' action is typically used when multiple arguments need |
|
to store constants to the same list. |
|
- ```count``` - Counts the number of times a keyword argument occurs. For example, |
|
used for increasing verbosity levels. |
|
- ```help``` - Prints a complete help message for all the options in the current |
|
parser and then exits. By default a help action is automatically added to the parser. |
|
See ArgumentParser for details of how the output is created. |
|
- ```version``` - Prints version information and exit. Expects a `version=` |
|
keyword argument in the addArgument() call. |
|
|
|
Details in [original action guide](http://docs.python.org/dev/library/argparse.html#action) |
|
|
|
|
|
Sub-commands |
|
============ |
|
|
|
ArgumentParser.addSubparsers() |
|
|
|
Many programs split their functionality into a number of sub-commands, for |
|
example, the svn program can invoke sub-commands like `svn checkout`, `svn update`, |
|
and `svn commit`. Splitting up functionality this way can be a particularly good |
|
idea when a program performs several different functions which require different |
|
kinds of command-line arguments. `ArgumentParser` supports creation of such |
|
sub-commands with `addSubparsers()` method. The `addSubparsers()` method is |
|
normally called with no arguments and returns an special action object. |
|
This object has a single method `addParser()`, which takes a command name and |
|
any `ArgumentParser` constructor arguments, and returns an `ArgumentParser` object |
|
that can be modified as usual. |
|
|
|
Example: |
|
|
|
sub_commands.js |
|
```javascript |
|
#!/usr/bin/env node |
|
'use strict'; |
|
|
|
var ArgumentParser = require('../lib/argparse').ArgumentParser; |
|
var parser = new ArgumentParser({ |
|
version: '0.0.1', |
|
addHelp:true, |
|
description: 'Argparse examples: sub-commands', |
|
}); |
|
|
|
var subparsers = parser.addSubparsers({ |
|
title:'subcommands', |
|
dest:"subcommand_name" |
|
}); |
|
|
|
var bar = subparsers.addParser('c1', {addHelp:true}); |
|
bar.addArgument( |
|
[ '-f', '--foo' ], |
|
{ |
|
action: 'store', |
|
help: 'foo3 bar3' |
|
} |
|
); |
|
var bar = subparsers.addParser( |
|
'c2', |
|
{aliases:['co'], addHelp:true} |
|
); |
|
bar.addArgument( |
|
[ '-b', '--bar' ], |
|
{ |
|
action: 'store', |
|
type: 'int', |
|
help: 'foo3 bar3' |
|
} |
|
); |
|
|
|
var args = parser.parseArgs(); |
|
console.dir(args); |
|
|
|
``` |
|
|
|
Details in [original sub-commands guide](http://docs.python.org/dev/library/argparse.html#sub-commands) |
|
|
|
|
|
Contributors |
|
============ |
|
|
|
- [Eugene Shkuropat](https://github.com/shkuropat) |
|
- [Paul Jacobson](https://github.com/hpaulj) |
|
|
|
[others](https://github.com/nodeca/argparse/graphs/contributors) |
|
|
|
License |
|
======= |
|
|
|
Copyright (c) 2012 [Vitaly Puzrin](https://github.com/puzrin). |
|
Released under the MIT license. See |
|
[LICENSE](https://github.com/nodeca/argparse/blob/master/LICENSE) for details. |
|
|
|
|
|
|