从命令行向python程序传递参数,还有比sys.argv更好的吗?

从命令行向python程序传递参数,还有比sys.argv更好的吗?,python,function,shell,arguments,Python,Function,Shell,Arguments,我有一个python脚本,我想从终端运行,它需要大约10个数值参数。到目前为止,我能想到的将参数传递给程序的唯一方法如下: python myscript.py 10,20,30,,40 然后使用sys.argv分离参数,处理它们并使用它们。问题是,有时中间的一些参数需要是空白的,以便程序使用它的“默认值”。这意味着目前我需要在参数中使用逗号来指定一个值为空,这与我在其他程序中看到的标准相反,这很烦人 有没有更好的办法 干杯 内森 操作系统:Ubuntu python版本:2.7 argpar

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

python myscript.py 10,20,30,,40
然后使用sys.argv分离参数,处理它们并使用它们。问题是,有时中间的一些参数需要是空白的,以便程序使用它的“默认值”。这意味着目前我需要在参数中使用逗号来指定一个值为空,这与我在其他程序中看到的标准相反,这很烦人

有没有更好的办法

干杯

内森

操作系统:Ubuntu

python版本:2.7
argparse
对您来说是个不错的选择。

首先,如果您有一些可以忽略的参数,那么这些参数应该是选项,而不是真正的参数

Python提供了多种解析参数的方法。最好的选择是,它拥有大量的功能,并且是继续开发的模块。如果您必须支持python的“旧”版本,那么您可能会对它感兴趣,即使它在python3.2中已被弃用。还有一个模仿C的getopt的模块(不要使用这个!它更多是出于历史原因,并帮助人们使用这些老式的解析方式)

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

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)
它可以用作:

$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'
请注意数字是如何自动转换为整数列表的,如果值不是整数或缺少参数等,则会发出错误

您还有一个默认的帮助文本:

$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

现在来看一下,Cheers可能将参数存储在一个文件中,然后从程序中读取它是一个解决方案。