Mit VIsitor und Ast mehrere Textstellen filtern
Verfasst: Freitag 13. November 2015, 09:48
Moin moin,
der folgende Code durchsucht eine vorgegebene Textdatei nach dem Methodenaufruf "ipaddresses.update()" und gibt die dort angegebenen Parameter zurück.
Aus dem Textinhalt von
Und hier die Klasse Visitor:
Jetzt habe ich das Problem, dass in der Textdatei auch mehrere Aufrufe enthalten sein können. Zum Beispiel:
ipaddresses.update({'psxeflee30': u'10.82.3.180'})
ipaddresses.update({'psxeflee301: u'10.82.3.181'})
An dieser Stelle wird mir allerdings nur der letzte Aufruf zurück gegeben: 10.82.3.181
Die anderen Aufrufe werden missachtet. Ich habe nun erfolglos versucht eine Schleife um den Aufruf der Methode visit() zu legen, jedoch erfolglos.....
Weiß jemand sonst weiter?
der folgende Code durchsucht eine vorgegebene Textdatei nach dem Methodenaufruf "ipaddresses.update()" und gibt die dort angegebenen Parameter zurück.
Aus dem Textinhalt von
macht der Code zum Beispiel: 10.81.3.182 10.81.3.183 10.81.3.181ipaddresses.update({'xas33315': u'10.81.3.182',
'xas33316': u'10.81.3.183',
'xas33317': u'10.81.3.181'})
Code: Alles auswählen
import ast
tempFile = open("../test.txt").read()
if "ipaddresses.update" in tempFile:
ipAddressVisitor = mkFileVisitor.Visitor("ipaddresses", "update")
ipAddressVisitor.visit(ast.parse(tempFile))
ipAddresses = ipAddressVisitor.resultCode: Alles auswählen
import ast
class Visitor(ast.NodeVisitor):
def __init__(self, paramID, paramAttribute):
ast.NodeVisitor.__init__(self)
self.result = None
self.paramID = paramID
self.paramAttribute = paramAttribute
def visit_Call(self, call):
if not isinstance(call.func, ast.Attribute):
return
attribute = call.func
if not isinstance(attribute.value, ast.Name):
return
name = attribute.value
if name.id == self.paramID and attribute.attr == self.paramAttribute:
self.result = ast.literal_eval(call.args[0])ipaddresses.update({'psxeflee30': u'10.82.3.180'})
ipaddresses.update({'psxeflee301: u'10.82.3.181'})
An dieser Stelle wird mir allerdings nur der letzte Aufruf zurück gegeben: 10.82.3.181
Die anderen Aufrufe werden missachtet. Ich habe nun erfolglos versucht eine Schleife um den Aufruf der Methode visit() zu legen, jedoch erfolglos.....
Weiß jemand sonst weiter?
