Как использовать пространство имен, возвращаемое parse_known_ args?

В настоящее время я пишу сценарий Python и пытаюсь динамически генерировать некоторые аргументы. Однако для следующего сценария возникает ошибка, в которой говорится, что объект «Пространство имен» не может быть повторен. Есть идеи, как исправить?

import argparse
from os import path
import re

replacements = {}
pattern = '<<([^>]*)>>'

def user_replace(match):
   ## Pull from replacements dict or prompt
    placeholder = match.group(1)
    return (replacements[placeholder][0] 
         if placeholder in replacements else 
          raw_input('%s? ' % placeholder))

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('infile', type=argparse.FileType('r'))
    parser.add_argument('outfile', type=argparse.FileType('w'))

    required, extra = parser.parse_known_args()
    infile, outfile = required.infile, required.outfile
    args = re.findall(pattern, infile.read())
    args = list(set(args))
    infile.seek(0)

    parser = argparse.ArgumentParser()
    for arg in args:
        parser.add_argument('--' + arg.lower())

    replacements = vars(parser.parse_args(extra))

    matcher = re.compile(pattern)

    for line in args.infile:
        new_line = matcher.sub(user_replace, line)
        args.outfile.write(new_line)

    args.infile.close()
    args.outfile.close()

if __name__ == '__main__':
    main()

Ошибка связана с возвращенным значением parser.parse_known_args (). Есть идеи, как я могу это обойти? Кто-то предложил создать объект и использовать интерфейс dict , но я не знаю, что именно это влечет за собой. Я новичок в Python, поэтому не понимаю, почему (infile, outfile), extra = parser.parse_known_args () не работают.

Edit: Обновлено с двумя исправлениями. Сначала исправил ошибку выше, используя принятый ответ ниже. Во-вторых, также исправлена ​​ошибка, из-за которой меня помечали за попытку добавить один и тот же аргумент дважды. Исправлено преобразованием аргументов в набор, а затем обратно в список. Теперь мой скрипт выполняется, но необязательные аргументы не действуют. Есть идеи?

5
задан gogasca 28 November 2018 в 08:24
поделиться