exec中的全局命令不替换值


import re
def test ( var ):
    op=""" 
    1/1/1/1  up        up :99005      53476      99005      g993-2-17a  
    1/1/1/2  up        up :99005      53148      99005      g993-2-17a  
    1/1/1/3  up        up :99005      53793      99005      g993-2-17a  
    """
    op=op.splitlines()
    for line in op:
        pattern = "([0-9]+/[0-9]+/[0-9]+/[0-9]+) *?([a-z]+) *?([a-z]+) :([0-9]+) +?([0-9]+) +?([0-9]+) +?([a-z0-9-]+)"
        if re.search(pattern, line):
            match=re.search(pattern, line)
            var1=re.sub(r'/', '_', match.group(1))
            x = var+"_"+ var1
            print x
            if_index = match.group(1)
            adm_state = match.group(2)
            exec("global %s" % (x))
            exec("%s = {}" % (x))
            exec("%s['whole']=match.group(0)" % (x))
            exec("%s['if_index']=match.group(1)" % (x))
            exec("%s['adm_state']=match.group(2)" % (x))
            exec("%s['opr_state']=match.group(3)" % (x))
            exec("%s['tx_rate_us']=match.group(5)" % (x))
            exec("%s['tx_rate_ds']=match.group(6)" % (x))
            exec("%s['op_mode']=match.group(7)" % (x))
            print info_1_1_1_1['if_index']

test("info")
print info_1_1_1_1

嗨,大家都是Python和脚本的新手。以上是我的脚本,我的目的是为相应的词典创建多个字典,并为相应的字典分配键和值对。对于每行,我想创建单独的字典。我想从Global Space上使用同名的字典。如果有什么不清楚的话,我会纠正它。

在全球空间中,我想访问字典,例如info_1_1_1_1 ['thoth']


global在两个exec调用之间不持续。这将有效:

exec("global barnbar=3n")

但是变量的动态设置是强烈的代码气味。每当您发现自己做类似的事情时,您都应该立即停止并重新评估是否有另一种方法来做到这一点。在这种情况下,我建议使用词典:

import re
data = {}
def test ( var ):
    op=""" 
    1/1/1/1  up        up :99005      53476      99005      g993-2-17a  
    1/1/1/2  up        up :99005      53148      99005      g993-2-17a  
    1/1/1/3  up        up :99005      53793      99005      g993-2-17a  
    """
    op=op.splitlines()
    for line in op:
        pattern = "([0-9]+/[0-9]+/[0-9]+/[0-9]+) *?([a-z]+) *?([a-z]+) :([0-9]+) +?([0-9]+) +?([0-9]+) +?([a-z0-9-]+)"
        if re.search(pattern, line):
            match=re.search(pattern, line)
            var1=re.sub(r'/', '_', match.group(1))
            x = var+"_"+ var1
            print(x)
            data[x] = {
                "whole": match.group(0),
                "if_index": match.group(1),
                "adm_state": match.group(2),
                "opr_state": match.group(3),
                "tx_rate_us": match.group(5),
                "tx_rate_ds": match.group(6),
                "op_mode": match.group(7),
            }
            print(data["info_1_1_1_1"]['if_index'])
test("info")
print(data["info_1_1_1_1"])

相关内容

  • 没有找到相关文章