Как преобразовать строку в вектор аргументов командной строки? - PullRequest
0 голосов
/ 05 февраля 2020

В python как выполнить синтаксический анализ строки так же, как анализируется строка аргумента командной строки, чтобы построить sys.argv?

Я хотел бы сделать следующее

Первый: разрешить передачу необязательного вектора аргумента в main в моем runnable.py:

def main(argv=[]):
    argv = argv or sys.argv[1:]
    parser = argparse.ArgumentParser(...)
    ... more parser config ...
    args = parser.parse_args(argv)

Затем в другом модуле я бы хотел использовать эту основную функцию изнутри python:

argv = how_do_i_do_this('''-f text.txt -o -q "Multi word argument" arg2 "etc."''')
assert(argv == ['-f', 'text.txt', '-o', '-q', 'Multi word argument', 'arg2', 'etc.'])
runnable.main(argv)

1 Ответ

3 голосов
/ 05 февраля 2020

Использование shlex.split:

>>> import shlex
>>> shlex.split('''-f text.txt -o -q "Multi word argument" arg2 "etc."''')
['-f', 'text.txt', '-o', '-q', 'Multi word argument', 'arg2', 'etc.']

Кроме того, Python изменяемые значения по умолчанию являются источником всего зла . Не используйте argv=[] в качестве аргумента по умолчанию для main, используйте argv=None, а затем проверьте его тип в теле main:

def main(argv=None):
    if argv is None:
        argv = sys.argv[1:]

# ... 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...