SecureCRT调用python脚本ImportError

环境:Win10 + SecureCRT 8.0 (x64 build 1063) ,该版本SecureCRT的内置python版本为64bit python 2.7.9。不同版本的SecureCRT所使用的python版本也不一样。

注:文章最后有解决方法。

    之前一直写的都是VBS的CRT脚本,但是这个语言应用平台太窄了,最主要很多语法总是让我摸不着脑壳,也没啥文档给我参考,所以换了python写CRT脚本。

 

    毕竟做网络工作,很多时候需要在交换机上查东西,做个自动查询接入交换机各个接口对应用户的MAC,IP及HostName还是极好的。当然查好了自动保存在excel文件中就更好了。

    我能想到的包就需要socket(用来查询hostname),re(正则表达式提取IP和MAC),openpyxl(excel操作),sys,os。

    经过一番奋斗,大体代码写好,看着逻辑也没啥问题,可惜了代码跑不起来!!???

SecureCRT调用python脚本ImportError_第1张图片

    你也好歹给多一些提示吧,为啥我os,sys,re模块import都没问题?socket和openpyxl就有问题?

 

    官网查了一波资料,没看出啥问题。算了算了,还是调试器伺候吧。

    比较幸运,没有反调试,也没什么花(难怪注册机到处都是,我听别人说的),调试器打开CRT,忽略所有异常,一路F9,在CRT中开启脚本,到达上述脚本异常位置。然后别点确定

    就用最简单的方法开搞吧,暴力搜索内存中所有模块中的字符串。搜索上述异常中的ImportError字符串。

SecureCRT调用python脚本ImportError_第2张图片

   这么容易就找到了...好吧,通过前面的内存地址跳转至反汇编窗口。

SecureCRT调用python脚本ImportError_第3张图片

    看起来应该就是这里。再去内存里定位一下这是谁的代码。

SecureCRT调用python脚本ImportError_第4张图片

    python2.7???先确认一下吧。下内存访问断点。重新跑脚本。

SecureCRT调用python脚本ImportError_第5张图片

   好吧,还真的是

   再写个代码测试一下:

# $language = "python"
# $interface = "1.0"

#--------------------------------------------------------------------------------------

from platform import python_version
crt.Dialog.MessageBox(python_version(),"run")

# 显示2.7.9

 

    由于之前我一直以为在CRT中跑python脚本需要先安装python环境,所以我之前有装3.6的环境,每次跑脚本也都以为调用的是这个环境,而且所有的代码,每个模块都是在3.6中测试的。

    上图中的python27.dll模块在crt安装目录中就有,所以python的运行环境crt是自带的。

拆了3.6的环境,重建个2.7的环境(我用的是2.7.15),删除crt安装目录下的python27.dll和python27.zip,修改代码使其可以在2.7环境中通过测试。问题解决,且可以使用新环境中的pip安装需要的包。

 

注意:如果2.7的python环境没有建好(检查环境变量),就删掉了crt安装目录下的python27的两个文件,crt将无法启动。至于为啥要删掉安装目录下的python文件,而不是直接使用?难道你不用其他包?我尝试了给python27.zip目录添加制作好的.pyc文件,很可惜,是不行的(我猜测,可能是环境的版本问题,但如果有新的环境,还留着crt自带的干嘛?)

 

注意:不要装3.x的python环境,我测试过crt无法使用这个版本。如果有多个python环境共处,保持2.7.x的版本为默认环境。重新安装2.7版本时,crt如果是64bit,python也要装64bit。

SecureCRT调用python脚本ImportError_第6张图片

 

 

 

如果是import自己写的模块,请参考:https://blog.csdn.net/MrRight17/article/details/82874479

 

 

 

你可能感兴趣的:(SecureCRT调用python脚本ImportError)