forked from zhurui/management
258 lines
8.2 KiB
Markdown
258 lines
8.2 KiB
Markdown
|
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.
|
|||
|
|
|||
|
|