Специализированный парсинг командной строки в Python

Вот и мы. Панель поиска должна была переключаться нажатием кнопки.

... # Driver initialization, navigating to the page etc.

# The first nested frame
frame_1 = driver.find_element_by_id("widget-container")
driver.switch_to.frame(frame_1)

# The second nested frame
frame_2 = driver.find_element_by_tag_name("iframe")
driver.switch_to.frame(frame_2)

# Toggling the search bar
driver.find_element_by_xpath("//div[contains(text(), 'Instrument')]").click()

# Actually sending in the query
search = driver.find_element_by_xpath("//input[@placeholder='Instrument']")
search.send_keys("Hey there!")
7
задан jfs 2 October 2008 в 00:52
поделиться

6 ответов

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

args = {}
for arg in shlex.split(cmdln_args):
    key, value = arg.split('=', 1)
    args[key] = value
10
ответ дан 6 December 2019 в 08:17
поделиться
  1. Попытайтесь следовать "Стандартам для Интерфейсов командной строки"

  2. Преобразуйте свои аргументы (как предложенный Thomas) к формату OptionParser.

    parser.parse_args(["--"+p if "=" in p else p for p in sys.argv[1:]])
    

Если параметры командной строки не находятся в sys.argv или подобном списке, а в строке затем (как ironfroggy предложены) использование shlex.split().

parser.parse_args(["--"+p if "=" in p else p for p in shlex.split(argsline)])
9
ответ дан 6 December 2019 в 08:17
поделиться

Без довольно интенсивной хирургии на optparse или getopt, я не полагаю, что можно разумно заставить их проанализировать формат. Можно легко проанализировать собственный формат, тем не менее, или перевести его во что-то, что optparse мог обработать:

parser = optparse.OptionParser()
parser.add_option("--ARG1", dest="arg1", help="....")
parser.add_option(...)
...
newargs = sys.argv[:1]
for idx, arg in enumerate(sys.argv[1:])
    parts = arg.split('=', 1)
    if len(parts) < 2:
        # End of options, don't translate the rest. 
        newargs.extend(sys.argv[idx+1:])
        break
    argname, argvalue = parts
    newargs.extend(["--%s" % argname, argvalue])

parser.parse_args(newargs)
0
ответ дан 6 December 2019 в 08:17
поделиться

Маленькая pythonic вариация на ответ shlex Ironforggy:

args = dict( arg.split('=', 1) for arg in shlex.split(cmdln_args) )

ой... - исправленный.

спасибо, J.F. Sebastian (добрался для запоминания тех выражений генератора отдельного аргумента).

2
ответ дан 6 December 2019 в 08:17
поделиться

А как насчет optmatch ( http://www.coderazzi.net/python/optmatch/index. htm )? Не является стандартным, но использует другой подход к синтаксическому анализу параметров и поддерживает любой префикс:

OptionMatcher.setMode (optionPrefix = '-')

1
ответ дан 6 December 2019 в 08:17
поделиться

Немного поздно на вечеринку ... но PEP 389 позволяет это и многое другое.

Вот небольшая хорошая библиотека, если она понадобится вашей версии Python code.google.com/p/argparse

Наслаждайтесь.

0
ответ дан 6 December 2019 в 08:17
поделиться
Другие вопросы по тегам:

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