我正在尝试解析 Python 中的命令行,如下所示:
$ ./command -o option1 arg1 -o option2 arg2 arg3
换句话说,该命令采用无限数量的参数,并且每个参数都可以可选地前面有一个-o
选项,该选项与该参数特别相关。我认为这被称为“前缀表示法”。
在 Bourne shell 中,我会执行以下操作:
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()
,因为这基本上是一个堆栈操作。但我猜这在 Python 上效果不佳,因为参数列表的sys.argv
顺序错误,必须像队列一样处理(即从左侧弹出)。我读过列表没有针对在 Python 中用作队列进行优化。
所以,我的想法是:转换argv
为 acollections.deque
和 use popleft()
,反向argv
usingreverse()
和 use pop()
,或者只是使用 int 列表索引本身。
有谁知道更好的方法来做到这一点,否则我的哪个想法在 Python 中是最佳实践?