Несколько позиционных аргументов с Python и argparse

Если это должно быть межплатформенным, я предлагаю 2 опции:

  1. Реализация промежуточный сервис, который ответственен за все доступы к файлу. Здесь можно использовать несколько механизмов для синхронизации запросов. Каждое клиентское приложение Java получает доступ к файлу только через этот сервис.
  2. Создают управление файл каждый раз, когда необходимо выполнить, синхронизировал операции. Каждое приложение Java, которое получает доступ к файлу, является ответственной проверкой управление файл и ожидание, в то время как этот управление файл существует. (почти как семафор). Процесс, делающий удалить/переименовать операцию, ответственен за создание/удаление управление файл.
24
задан Blair 21 March 2011 в 03:17
поделиться

1 ответ

Действие 'добавить' имеет больше смысла с дополнительным:

parser.add_argument('-i', '--input',action='append')
parser.parse_args(['-i','fileone', '-a', '-i','filetwo', '-b', '-i','filethree'])

Вы можете перемежать опциональные объекты с отдельными позиционными позициями ('input1 -a input2 -b input3'), но вы не можете чередовать опциональные функции в пределах одного многопозиционный позиционный. Но вы можете сделать это с помощью двухэтапного анализа.

import argparse
parser1 = argparse.ArgumentParser()
parser1.add_argument('-a', action='store_true')
parser1.add_argument('-b', action='store_true')
parser2 = argparse.ArgumentParser()
parser2.add_argument('input', nargs='*')

ns, rest = parser1.parse_known_args(['fileone', '-a', 'filetwo', '-b', 'filethree'])
# Namespace(a=True, b=True), ['fileone', 'filetwo', 'filethree']

ns = parser2.parse_args(rest, ns)
# Namespace(a=True, b=True, input=['fileone', 'filetwo', 'filethree'])

http://bugs.python.org/issue14191 - это предложенный патч, который сделает это с помощью одного вызова:

parser.parse_intermixed_args(['fileone', '-a', 'filetwo', '-b', 'filethree'])
4
ответ дан 28 November 2019 в 23:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: