Я пытаюсь разобрать командную строку в 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()
, так как это в основном операция стека. Но я предполагаю, что это не сработает так же на Python, потому что список аргументов в sys.argv
находится в неправильном порядке и должен обрабатываться как очередь (то есть всплывающее окно слева). Я читал, что списки не оптимизированы для использования в качестве очередей в Python.
Итак, мои идеи таковы: преобразовать argv
в collections.deque
и использовать popleft()
, обратить argv
, используя reverse()
и использовать pop()
, или, возможно, просто работать с самими индексами списка int.
Кто-нибудь знает лучший способ сделать это, иначе какая из моих идей будет лучшей практикой в Python?