次のようなPythonでコマンドラインを解析しようとしています:
$ ./command -o option1 arg1 -o option2 arg2 arg3
つまり、コマンドは無制限の数の引数を取り、各引数の前に、-o
その引数に特に関連するオプションをオプションで付けることができます。これを「接頭表記」と呼んでいると思います。
Bourne シェルでは、次のようなことを行います。
while test -n "$1"
do
if test "$1" = '-o'
then
option="$2"
shift 2
fi
# Work with $1 (the argument) and $option (the option)
# ...
shift
done
Bash のチュートリアルなどを見回すと、これは受け入れられているイディオムのように思われるので、Bash はこの方法でコマンドライン引数を操作するように最適化されていると思います。
このパターンを Python で実装しようとして、最初に推測したのは を使用することでしたpop()
。これは基本的にスタック操作であるためです。sys.argv
しかし、引数のリストが間違った順序であり、キューのように処理する必要があるため (つまり、左からポップ)、これは Python ではうまく機能しないと思います。Python でキューとして使用するためにリストが最適化されていないことを読みました。
したがって、私の考えは次のとおりです。 a に変換argv
してcollections.deque
使用するpopleft()
、逆にargv
使用reverse()
して使用するpop()
、または int リストのインデックス自体を操作するだけです。
これを行うためのより良い方法を知っている人はいますか?