You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Cisco Packet Tracer中Python代码无法运行解决方案咨询

Cisco Packet Tracer 运行Python脚本失败解决方案

核心故障原因

  • Cisco Packet Tracer(以下简称PT)内置的是裁剪版MicroPython运行环境,并非PC端完整的CPython环境,大量Python标准库未内置,你代码中导入的ipaddress模块在PT环境中不存在,导入阶段就会抛出模块不存在的错误。
  • 你当前贴出的代码存在基础语法错误:Python为强制缩进语法,你贴出的版本中所有函数内部逻辑、if/for循环下属代码块全部顶格书写,直接运行会触发IndentationError,你在其他平台能正常运行是因为本地存储的源文件保留了正确缩进,粘贴时格式丢失。
  • PT环境的文件系统为虚拟沙箱,不支持你代码中写的相对路径读写本地文本文件的逻辑,强行调用会触发权限/路径不存在错误。
  • PT的Python脚本并非像本地环境一样直接运行.py文件,需要绑定到拓扑内的网络设备上执行,直接拖拽本地.py文件到PT中无法运行。

提交pkt文件的操作步骤

  1. 打开PT软件,从底部设备栏拖拽1台PC终端到空白拓扑画布上。
  2. 双击画布上的PC设备,弹出配置窗口后切换到Programming标签页,在左侧语言列表选择Python,进入PT内置的Python编辑界面。
  3. 将原代码中不兼容PT环境的部分修改:
  • 删除import ipaddress导入语句,自行实现整数格式IPv4转点分十进制的逻辑,不依赖缺失的标准库
  • 补全所有代码块的缩进,函数、条件判断、循环下属代码统一缩进4个空格
  • 删除读写conversion.txt的中转逻辑,直接在内存中存储校验后的IP列表,避免沙箱文件系统报错
  1. 将修改后的代码粘贴到PT的代码编辑区,点击编辑区下方的Run按钮测试,确认输入10个IP后可以正常输出各进制转换结果。
  2. 点击PT左上角保存按钮,将拓扑存储为pkt格式文件即可提交。

适配PT环境的可直接运行代码

def in_range(n): 
    if n >= 0 and n<=255:
       return True
    return False

def has_leading_zero(n):
    if len(n)>1:
        if n[0] == "0":
            return True
    return False

def int_to_ip(int_ip):
    # 替代ipaddress库的整数转点分IPv4逻辑
    bin_ip = bin(int(int_ip))[2:].zfill(32)
    return '.'.join([str(int(bin_ip[i:i+8],2)) for i in range(0,32,8)])

def isValid(s):
    # 先判断是不是整数格式的IP
    if s.isdigit():
        try:
            int_s = int(s)
            if 0 <= int_s <= 2**32-1:
                return 2 # 标记为整数格式IP
        except:
            pass
    s = s.split(".")
    if len(s) != 4:
        return 0
    for n in s:
        if has_leading_zero(n):
            return 0
        if len(n) == 0:
            return 0
        try:
            n = int(n)
            if not in_range(n):
                return 0
        except:
            return 0
    return 1

def hexadecimal(ip):
    parts=ip.split('.')
    hexNumber= format(int(parts[0]), '02X') \
        + format(int(parts[1]), '02X') \
        + format(int(parts[2]), '02X') \
        +format(int(parts[3]), '02X')
    return hexNumber 
    
def binary(ip):
    parts=ip.split('.')
    binaryNumber= format(int(parts[0]), '08b') \
        + format(int(parts[1]), '08b') \
        + format(int(parts[2]), '08b') \
        +format(int(parts[3]), '08b')
    return binaryNumber

def octal(ip):
    parts=ip.split('.')
    octalNumber= format(int(parts[0]), '03o') \
        + format(int(parts[1]), '03o') \
        + format(int(parts[2]), '03o') \
        +format(int(parts[3]), '03o')
    return octalNumber

def decimal(ip):
    parts=ip.split('.')
    decimalNumber= format(int(parts[0]), '03d') \
        + format(int(parts[1]), '03d') \
        + format(int(parts[2]), '03d') \
        +format(int(parts[3]), '03d')
    return decimalNumber

def conversions(ip):
    a=decimal(ip)
    b=binary(ip)
    c=octal(ip)
    d=hexadecimal(ip)
    return a, b, c, d

if __name__=="__main__":
    print("Input 10 ipv4 addresses")
    ip_list=[]
    n=10
    for i in range(0, n):
        ip=input().strip()
        check_res = isValid(ip)
        if check_res == 1:
            ip_list.append(ip)
        elif check_res == 2:
            ip_list.append(int_to_ip(ip))
        else:
            # 非法IP默认填0.0.0.0,可根据考核要求调整
            ip_list.append("0.0.0.0")

    for idx, ip in enumerate(ip_list):
        print(f"The {idx+1} IP address in Decimal, Binary, Octal and hexadecimal format is {conversions(ip)} \n")

注意:如果考核要求必须保留文件输出逻辑,可以将文件路径改为PT虚拟系统的绝对路径flash:/conversion.txt,不要用本地系统的相对路径。

内容的提问来源于stack exchange,提问作者vri

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 02:03:43