4

複数の入力ファイルをマージして単一の出力ファイルを生成するために使用するスクリプトを作成しており、argparse. 私にとって最も自然に見える方法は、-i1 つ以上の入力ファイル名を取り、その後に出力ファイル名を表す位置引数が続く、1 つのオプションの入力 を使用することです。これが私が念頭に置いていたものの例です:

#!/usr/bin/env python3
"""
Script for merging input files
"""
import argparse

script_docstring = 'Read some input files and create a merged output.'
parser = argparse.ArgumentParser(description=script_docstring)
# Optional input file names
parser.add_argument('-i --inputs', nargs='+', type=str, required=True,
                    help='Input file names', dest='inputs')
# Positional output file name
parser.add_argument('fname_out', type=str, help='Output file name')
args = parser.parse_args()

# Display what the user chose at the command line
print(args.inputs)
print(args.fname_out)

によって作成された自動生成されたヘルプ メッセージを印刷するargparseと、コール シグネチャは意図したとおりに表示されます。

> ./mergefiles.py --help
usage: mergefiles.py [-h] -i --inputs INPUTS [INPUTS ...] fname_out

Read some input files and create a merged output.

positional arguments:
  fname_out             Output file name

optional arguments:
  -h, --help            show this help message and exit
  -i --inputs INPUTS [INPUTS ...]
                        Input file names

ただし、実際にスクリプトを実行しようとするとargparse、オプションのリストに含まれているかのように最終的な位置引数を誤って解析していることを示唆するエラーが表示されます。

> ./mergefiles.py -i a.in b.in c.in test.out
usage: mergefiles.py [-h] -i --inputs INPUTS [INPUTS ...] fname_out
mergefiles.py: error: the following arguments are required: fname_out

私の質問:argparse最終引数を位置引数として扱って、このようなケースを正しく処理することさえ可能ですか? または、出力ファイル名をオプションの引数に変えるなどの「回避策」ソリューションを受け入れる唯一のオプションです-f --fname_out

やりたいことができない場合は、フォールバック ソリューションとしてまさにそれを実装する予定です。argparseただし、洗練されていない回避策を受け入れる前に、これを「正しい」方法で処理できるかどうかに興味があります。

4

1 に答える 1