首页 > 解决方案 > 全局关键字未反映

问题描述

我试图通过调用 via.. 来打印一些命令,函数:下面是我的代码:

import re

new_acl_statement = ""

 cisco_commands = [
     "ip access-list resequence vlan19_in 10 10",
     "ip access-list extended vlan19_in",
     new_acl_statement,   =====> # this is variable
     "exit",
     "ip access-list resequence vlan19_in 10 10",
    "end"]


def check_acl_config():
    output = "90 permit ip host 1.1.1.1 host 2.2.2.2"
    if "2.2.2.2" in output:
        strip_output = re.split('\d+', output, 1)
        acl_statement = strip_output[1]
        seq_num = re.findall('[0-9]+', output)
        acl_seq_num = seq_num[0]
        int_acl_seq_num = int(acl_seq_num)
        int_acl_seq_num += 1
        str_int_acl_seq_num = str(int_acl_seq_num)
        global new_acl_statement                   ==========> # global keyword defined
        new_acl_statement = str_int_acl_seq_num + acl_statement

        return cisco_commands
    else:
        return "nothing"


send_command = check_acl_config()
print(send_command)

执行上述代码后,我的输出如下:

['ip access-list resequence vlan19_in 10 10', 'ip access-list extended vlan19_in', '', 'exit', 'ip access-list resequence vlan19_in 10 10', 'end']

从输出中您可以看到,它只是打印出来自变量“cisco_commands”的语句。我在“if”函数中有一些逻辑并且那个没有执行?我为变量“new_acl_statement”定义了全局关键字,为什么它没有反映在我的输出中?

预期输出:

['ip access-list resequence vlan19_in 10 10', 'ip access-list extended vlan19_in', '91 permit ip host 1.1.1.1 host 2.2.2.2', 'exit', 'ip access-list resequence vlan19_in 10 10', 'end']

有人可以指导我哪里出错了吗?

谢谢和问候, 马杜

标签: pythonpython-3.x

解决方案


这里的问题是cisco_commands在分配之前定义的new_acl_statement。即使当您定义新值时,它也不会在cisco_commands. 更新cisco_commands新值后最好更新。


推荐阅读