关于函数:从命令行传递参数到python程序,什么比sys.argv更好?

Passing arguments to a python program from the command line, anything better than sys.argv?

本问题已经有最佳答案,请猛点这里访问。

我有一个要从终端运行的python脚本,它需要10个数字参数。到目前为止,我能想到的将参数传递给程序的唯一方法是:

1
python myscript.py 10,20,30,,40

然后使用sys.argv来分离参数,处理它们并使用它们。问题是,有时候中间的一些参数需要为空,这样程序就可以使用它的"默认值"。这意味着现在我需要在参数中使用逗号来指定一个值为空,这与我在其他程序中看到的标准相反,这很烦人。

有更好的方法吗?

干杯,

弥敦

操作系统:Ubuntu

python版本:2.7


所有的第一,如果你有一些参数,这些参数可以omitted,应该是选项和不真实的说法。

Python提供了比单参数分析。最好的选择是argparse安切洛蒂吨,这和它的模块的特点是在继续发展。如果你有一个旧版本的Python支持"(然后你可能有兴趣在optparse,即使它是在python3.2.过时因此,在存在getopt模块A是C的mimics getopt(请勿使用!它有更多的历史原因和帮助人民使用旧风格的分析与研究

使用一个简单的例子可能是:argparse

1
2
3
4
5
6
7
8
9
import argparse

parser = argparse.ArgumentParser()
parser.add_argument('--option-name', action='store', dest='option_name_var')
parser.add_argument('numbers', type=int, nargs='*')

parsed = parser.parse_args()   #parses sys.argv by default
print(parsed.numbers)
print(parsed.option_name_var)

可以被用来作为:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
$python example.py 1 2 3
[1, 2, 3]
None
$python example.py 1 2 3  --option-name"value"
[1, 2, 3]
value
$python example.py 1 2 3  --option-name
usage: example.py [-h] [--option-name OPTION_NAME_VAR] [numbers [numbers ...]]
example.py: error: argument --option-name: expected one argument
$python example.py --option-name
usage: example.py [-h] [--option-name OPTION_NAME_VAR] [numbers [numbers ...]]
example.py: error: argument --option-name: expected one argument
$python example.py --option-name 5
[]
5
$python example.py 1 2"string"
usage: example.py [-h] [--option-name OPTION_NAME_VAR] [numbers [numbers ...]]
example.py: error: argument numbers: invalid int value: 'string'

说明如何分配是自动转换到整数列表,如果错误是在发出的价值是一个整数或有缺失的参数等。

你有一个默认的帮助文件:

1
2
3
4
5
6
7
8
9
$python example.py -h
usage: example.py [-h] [--option-name OPTION_NAME_VAR] [numbers [numbers ...]]

positional arguments:
  numbers

optional arguments:
  -h, --help            show this help message and exit
  --option-name OPTION_NAME_VAR

docs.python.org http:/ / / 2 /图书馆/ argparse.htmlargparse将是一个很好的选择为你。