OptionParser - поддержка любой опции в конце командной строки

ax представляет собой двумерный массив с формой (2, 2). Следовательно, each_ax является одномерным массивом с формой (2,). Вы должны получить доступ к каждому элементу отдельно. Например:

for row in ax:
    for each_ax in row:
        each_ax.legend(['Male', 'Female'])
5
задан Brian Campbell 4 April 2009 в 00:36
поделиться

4 ответа

Попытайтесь использовать disable_interspersed_args()

#!/usr/bin/env python
from optparse import OptionParser

parser = OptionParser()
parser.disable_interspersed_args()
parser.add_option("-v", action="store_true", dest="verbose")
(options, args) = parser.parse_args()

print "Options: %s args: %s" % (options, args)

Когда выполнено:

$ ./options.py foo -v bar
Options: {'verbose': None} args: ['foo', '-v', 'bar']
$ ./options.py -v foo  bar
Options: {'verbose': True} args: ['foo', 'bar']
$ ./options.py foo -a bar
Options: {'verbose': None} args: ['foo', '-a', 'bar']
13
ответ дан 18 December 2019 в 14:51
поделиться

Экземплярами OptionParser можно на самом деле управлять во время операции парсинга для сложных случаев. В этом случае, однако, я верю сценарию, который Вы описываете, поддерживается out-of-the-box (который был бы хорошими новостями если верный! как часто это происходит??). Посмотрите этот раздел в документах: Запросы и управление Вашим синтаксическим анализатором опции.

Заключить ссылку в кавычки выше:

disable_interspersed_args ()

Парсинг набора для остановки на первой неопции. Используйте это, если у Вас есть командный процессор, который выполняет другую команду, которая имеет собственные опции, и Вы хотите удостовериться, что эти опции не запутываются. Например, каждая команда могла бы иметь различный набор опций.

1
ответ дан 18 December 2019 в 14:51
поделиться
from optparse import OptionParser
import subprocess
import os
import sys

parser = OptionParser()
parser.add_option("-q", "--quiet",
                  action="store_true", dest="quiet", default=False,
                  help="don't print output")
parser.add_option("-s", "--signal",
                  action="store_true", dest="signal", default=False,
                  help="signal end of program and return code")

parser.disable_interspersed_args()
(options, command) = parser.parse_args()

if not command:
    parser.print_help()
    sys.exit(1)

if options.quiet:
    ret = subprocess.call(command, stdout=open(os.devnull, 'w'), 
                             stderr=subprocess.STDOUT)
else:
    ret = subprocess.call(command)

if options.signal:
    print "END OF PROGRAM!!! Code: %d" % ret
1
ответ дан 18 December 2019 в 14:51
поделиться

Можно использовать сценарий удара как это:

#!/bin/bash
while [ "-" == "${1:0:1}" ] ; do
  if [ "-v" == "${1}" ] ; then
    # do something
    echo "-v"
  elif [ "-s" == "${1}" ] ; then
    # do something
    echo "-s"
  fi
  shift
done
${@}

$ дает Вам остальную часть командной строки, которая не была использована вызовами сдвига. Для использования ssh, Вы просто изменяете строку от $ к ssh $ {пользователь} $ {хост} $

test.sh повторяют bla
bla

test.sh-v повторяют bla
- v
bla

test.sh-v-s повторяют bla
- v
- s
bla

-2
ответ дан 18 December 2019 в 14:51
поделиться
Другие вопросы по тегам:

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