Не разбирать параметры после последнего позиционного аргумента

я пишу оболочку для ssh [1 1102908] клиент командной строки. После первого позиционного аргумента, который является частью команды , все дальнейшие параметры также должны рассматриваться как позиционные аргументы.

В optparse , я полагаю, это будет сделано с помощью disable_interspersed_args .

Сейчас у меня что-то вроде этого:

parser = argparse.ArgumentParser()
parser.add_argument('--parallel', default=False, action='store_true')
# maybe allow no command? this would ssh interactively into each machine...
parser.add_argument('command', nargs='+')
args = parser.parse_args()

Но если параметры передаются как часть команды (например, my_wrapper ls -l ), они вместо этого интерпретируются ] ArgumentParser как неизвестные параметры. ошибка: нераспознанные аргументы: -l

Если я использую parse_known_args () , параметры могут быть удалены не по порядку.

p = argparse.ArgumentParser()
p.add_argument('-a', action='store_true')
p.add_argument('command', nargs='+')
print(p.parse_known_args())

$ python3 bah.py -b ls -l -a
(Namespace(a=True, command=['ls']), ['-b', '-l'])

Здесь вы можете видеть, что позиция -b до ls была потеряна, а -a был извлечен из команды, которая является нежелательно.

Как я могу:

  • Предотвратить анализ аргументов после определенного момента?
  • Отключить анализ перемежающихся аргументов?
  • Разрешить использование аргументов с префиксом в качестве позиционных аргументов?

15
задан Matt Joiner 27 June 2011 в 05:00
поделиться