1

端末から実行したい Python スクリプトがあり、約 10 個の数値引数が必要です。これまでのところ、引数をプログラムに渡すことを考えることができる唯一の方法は次のとおりです。

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

そして、sys.argv を使用して引数を分離し、処理して使用します。問題は、プログラムが「デフォルト値」を使用するように、途中の引数の一部を空白にする必要がある場合があることです。これは、現時点では引数にコンマを使用して値が空白であることを指定する必要があることを意味します。これは、他のプログラムで見た標準に反するため、面倒です。

これについてもっと良い方法はありますか?

乾杯、

ネイサン

OS: Ubuntu

Python バージョン: 2.7

4

2 に答える 2

3

まず第一に、省略できる引数がある場合、それらの引数はオプションあり、実際の引数ではありません。

Python は、引数を解析する方法を複数提供しています。最良の選択はargparse、多くの機能と開発が継続されているモジュールを備えた です。「古い」バージョンの python をサポートする必要がある場合はoptparse、python3.2 で廃止されましたが、に興味があるかもしれません。getoptC の 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
于 2013-04-06T12:37:06.367 に答える
0

http://docs.python.org/2/library/argparse.html argparseが適しています。

于 2013-04-06T10:53:18.823 に答える