How to use namespace zurückgegeben parse_known_args?

Ich gerade Schreibe ein Python-Skript und versucht, dynamisch zu generieren, einige Argumente. Jedoch wird ein Fehler geworfen wird, für das folgende Skript unter Angabe 'Namespace' object is not iterable. Irgendwelche Ideen auf, wie zu lösen?

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()

Den Fehler mit dem Rückgabewert der parser.parse_known_args(). Irgendwelche Ideen auf, wie könnte ich dies umgehen, obwohl? Jemand schlug vor, erstellen Sie ein Objekt und mit der dict interface, aber ich weiß nicht, was dies genau zur Folge hat. Ich bin wirklich neu in Python, also ich verstehe nicht, warum (infile, outfile), extra = parser.parse_known_args() würde nicht funktionieren.

Edit: Aktualisiert mit zwei Korrekturen. Die erste fest-die oben genannten Fehler mit dem akzeptierten Antwort unten. Zweitens, auch es wurde ein Fehler behoben, ich war immer gekennzeichnet und versuchen, um das gleiche argument zweimal. Behoben, indem args ein Satz dann wieder eine Liste. Nun mein Skript läuft, aber die optionalen Argumente haben keine Wirkung. Irgendwelche Ideen?

  • Bereits beantwortete diese auf Ihre ursprüngliche Frage.
InformationsquelleAutor Shayon Saleh | 2011-07-26
Schreibe einen Kommentar