工作遇到某个项目,要在某个java的软件上模拟输入实现GUI自动化操作,就是类似外挂的功能,过程中遇到要判断图片相似度(因为抓不到java软件的win32句柄,只好判断GUI控件的大致外观来操作),我就想到了python的PIL库来干。原先的思路是这样的,先做个exe,然后直接通过python的capi,调用python脚本工作。后来发现非控制台程序的exe,嵌入python是会有这样那样的问题出现。参见《PyRun_SimpleString的无穷怨念》

http://blog.csdn.net/skyremember/archive/2008/09/17/2941174.aspx

于是在dll里面去嵌入python,dll里面可以用win32线程来调度python脚本的执行状态。

然后就涉及到发布的问题,先是这样子出现 “由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。”

查了下资料,http://blog.solrex.cn/articles/py2exe-for-python-26-sucks.html 意思是python2.6是vc++2008编译的,所以要装Microsoft Visual C++ 2008 Redistributable Package。

再来就是csdn上面交流得来的,先把涉及到的python脚本用py2exe发布出来。

这个过程大致如下

1
2
3
4
# setup.py
from distutils.core import setup
import py2exe
setup(console=["hello.py"])

运行setup.py,记得要传一个参数

1
python setup.py py2e

于是生成的dist文件夹里就是发布好的程序了。 按照这个思路,解压library.zip里面的程序到dll目录也就可以运行了,试验发现如果是dll的话, w9xpopen.exe到是不必打包带进去了,这样我的dll连同这些文件都放到一个目录里,exe调用这个 dll就完成任务了。我的dll是Release版本的,因为我带的dll是python26.dll而不是python26_d.dll, 这样客户机再也不必安装python就可以运行带有python脚本的程序了。

总结:这谁想出来的,搞得这么复杂,LUA就没有这么复杂,直接2个DLL就完事了,但是估计调用 库的话也是一样的。

后记:其实非商业项目可以用selenium这类GUI自动化测试软件来干,也就是写写脚本。

发表评论