我刚刚开始使用 Python,所以请耐心等待。 过去 3 天我一直在 google、Stack Overflow、Github、python.org 和 xxxx.com 上寻找此错误的解决方案。我已经从其他错误中取得了进展(部分感谢上述网站),但这一个让我难住了,我似乎无法解决它。
我正在运行以下版本的东西: Windows 10 企业版 64 位 蟒蛇3.6,pysnmp 4.4.4,pyasn1 0.2.3 我使用 paramiko 进行 ssh 并使用 tkinter 作为 GUI 我的项目是使用 Visual Studio Code v1.20.1 组成的
基本上我已经制作了一个Python应用程序,可以登录到cisco交换机并向主干添加一个vlan,将其替换为另一个vlan,或者删除两个vlan
每次进行这些 VLAN 更改之一时,脚本都会向 NMS 发送一个 snmp 陷阱,说明刚刚做了什么。陷阱只是一个 OID,如下所示:
def sendTrap(system):
debug.setLogger(debug.Debug('msgproc'))
next(sendNotification(SnmpEngine(),
CommunityData('blahblah'),
UdpTransportTarget(('1.1.1.1', 162)),
ContextData(),
'trap',
# sequence of custom OID-value pairs
[ObjectType(ObjectIdentity('1.3.6.1.2.1.1.1.0'), OctetString(system))]))
还会发生其他一些事情,例如进行更改时的背景颜色,并且计时器启动,在预定的时间后将所有内容重置回来。
当我将其作为 python 脚本运行时,该程序可以完美运行。
但是,当我使用 cx_freeze 创建我的小应用程序的 exe 文件时,除了 snmp 陷阱之外,一切正常,并且我当前收到以下回溯错误:
2018-02-17 02:17:39,956 pysnmp: running pysnmp version 4.4.4
2018-02-17 02:17:39,957 pysnmp: debug category 'msgproc' enabled
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python\Python36-32\lib\site-packages\pysnmp\entity\engine.py", line 91, in __init__
'__SNMP-FRAMEWORK-MIB', 'snmpEngineMaxMessageSize')
File "C:\Python\Python36-32\lib\site-packages\pysnmp\smi\builder.py", line 409, in importSymbols
'No module %s loaded at %s' % (modName, self)
pysnmp.smi.error.MibNotFoundError: No module __SNMP-FRAMEWORK-MIB loaded at pysnmp.smi.builder.MibBuilder object at 0x034C9150
模块
__SNMP-FRAMEWORK-MIB
位于C:\Python\Python36-32\Lib\site-packages\pysnmp\smi\mibs\instances
中,我将此文件夹包含在安装文件中,如下所示(现在这是我认为我出错的地方):
options = {
'build_exe': {
#'packages':packages,
'include_files':[
os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tk86t.dll'),
os.path.join(PYTHON_INSTALL_DIR, 'DLLs', 'tcl86t.dll'),
'C:\\Python\\Python36-32\\Lib\\site-packages\\idna',
'C:\\Python\\Python36-32\\Lib\\site-packages\\pysnmp\\smi\\mibs',
'C:\\Python\\Python36-32\\Lib\\site-packages\\pysnmp\\smi\\mibs\\instances'
],
},
}
*请忽略奇怪的缩进,因为我试图让格式正确以便在此处呈现它
抱歉,尽管我在过去几天里读了很多关于这方面的文章,但我对包、模块、选项和包含等内容并不完全了解,所以这对我来说有点陌生。
如果有人能看出我哪里出了问题或者我需要提供更多信息,请告诉我。任何帮助将不胜感激。 谢谢
在 python 论坛 snippsat 的大力帮助下,我终于成功了。 本质上 cx_freeze 不会很好地发挥作用,所以我们最终使用 pyinstaller 对“spec”文件进行了一些调整(详见 python-forum),现在一切正常。