易语言与python的一点想法">关于易语言与Python的一点想法
小香蕉 2019年7月11日
说在前面
最近吃饭的时候总是会想很多关于易语言的事情。易语言是我学会的第一门语言,虽然它被喷的很惨很惨,具体可见:易语言 知乎。但是由于它极高的上手性,还是成为我高中时期最喜欢的编程工具。(当时我还没听说过Python)易语言画界面是非常简单的,用鼠标拖动一下组件,简简单单的几句代码就可以写一个简单的GUI程序。我想,在界面化的程序上,除了Web程序上用Javascript和CSS画界面。对于我这样懒惰的人,易语言无非是一个比较好的选择。Python,熟悉易语言的我在刚学Python时极度不适应,但是在学习了一段时间之后,我就改变了我的想法,Python真的太舒服了...
不说得太远了,先说下我最近的想法(疑问):
易语言能和Python结合起来吗?
结合的方式应该是怎样的?
结合起来有什么用?
在自问自答上面的问题之前,先来看一看易语言与Python有什么不同点:
易语言与Python的不同
先来看看易语言与Python编程环境的不同:
易语言:


易语言这个弹出输入的内容,我只写了一行代码,其他的只是组件的大小和位置,这些易语言都已经安排好了,只需要添加参数即可。
那用Python写一个这样的弹出输入框的程序需要多少行代码呢?
Python:
GUI编程上手并不容易,可以参考以下两篇:
可见Python直接写界面,比起语言还是要多很多代码量的。(而且环境配置要踩很多坑)我比较烦的也就是这一点,每一个参数都得有一行代码的话,实在太麻烦了。(其实就是懒得学?)
当然,易语言除了界面以外和Python相比起来有很多的缺点,而Python做界面比较麻烦,却在其他方面比易语言稳定高效。这也是我想总结易语言与Python结合方式的一个原因。那有没有方式把这两部分结合起来,比如用易语言做界面部分,Python做功能部分又会怎么样呢?
回到上面的问题。
易语言能和Python结合起来吗?
可以!
结合的方式应该是怎样的?
1. 直接用DOS调用取运行结果
需要用到精易模块->系统_取DOS运行结果()
系统_取DOS执行结果 (“python ” + 取运行目录 () + “\test.py”)
test.py中的内容:
print("Hello World.")
运行会返回执行的结果。之后在易语言当中对结果进行下一步的操作。
如图:

这种方式是最直接的也是最简单的,在一些简单的命令输入,单一内容返回的脚本中比较适用。
参考:
2. 直接在易语言当中执行Python语句
感谢师傅们的分享,前者还直接将功能写成了模块来简化调用。
我觉得直接调用Python的API这个方式蛮有意思的,但是又比较鸡肋。
我尝试了简单的python语句,如简单的循环之类的,可以正常执行并返回结果,但我使用稍微复杂一点的命令如requests获取网页源码,就直接不返回内容了。
简单的命令在易语言当中就能做到,又为何用到python呢。 所以这个也只能作为易语言和Python结合的一种方式吧。个人认为实用性太低了。
例子:

参考:
3. Python调用易语言的函数
由于这个方法需要32位的Python,环境搭建比较麻烦就不演示了。
我还没想到什么样的脚本需要用Python调用易语言的dll,暂且留着把。
4. 为什么一定要互相调用呢?
在看了前面几种方式之后,我还是觉得不是很方便。为什么一定要互相调用呢?
我想到了一种形式,就是用数据库做为“中间件”,易语言和Python都单独运行。
一个简单的程序逻辑如下:

易语言提供操作界面,将任务插入到数据库中的任务列表里。Python脚本取数据库内的任务列表逐一执行,将执行的结果插入到结果列表里,易语言读取结果列表,将结果展示。
就用批量获取网页状态工具作为一个简单的例子:
用易语言做的界面如下图所示:

源码部分:


数据库结构:

Python脚本:
import pymysql, requests, base64, time
# 设置数据库
mysql_host = "127.0.0.1"
mysql_user = "root"
mysql_passwd = "*"
mysql_db = "html"
mysql_table = "task"
def run_tasks():
conn = pymysql.connect(host=mysql_host, user=mysql_user, passwd=mysql_passwd, db=mysql_db)
cur = conn.cursor()
cur.execute("SELECT id,link,html FROM " + mysql_table)
links = cur.fetchall()
for link in links:
if link[2] == "":
try:
html_raw = requests.get(link[1])
html_statu = html_raw.status_code
except Exception as e:
print(e)
html_statu = "error"
cur.execute("UPDATE `html`.`task` SET `html` = '{0}' WHERE `id` = {1};".format(html_statu, link[0]))
print(link[1] + " update success")
while True:
time.sleep(10)
run_tasks()
运行过程:
运行Python脚本,保存脚本运行
输入网址添加到数据库的任务序列
Python脚本读取任务序列并获取网页状态
刷新获取结果
那这样做的好处就是:不用再考虑易语言如何调用Python,而是各自单独运行,只需要操作数据库就行了。
暂时想到的几个缺点:
无法做到瞬时反应,都需要通过sleep,时钟来控制任务的执行和结果显示
易语言支持的数据库太少,本想用Mongodb来做例子的,发现易语言的mongodb库实在是...麻烦。
当程序庞大起来,易语言-数据库-Python的逻辑也会非常复杂
只是作为一个简单的例子,可以按照这样的逻辑满足更复杂的项目需求。
写完这个例子之后发现,这种结合应该适用于任何语言。或者说这个不能称作结合,只能叫做各自完成任务罢了。不过这也能算得上易语言与其他语言的一种合作方式了?如果达到这点也就差不多了。
结合起来有什么用?
就如前面所说,易语言开发界面简单方便,Python实现功能点更加高效稳定。两者结合起来,岂不美哉?
最后
写的不是很好,很多内容都没有往深里探究,没这么多的心思,也没那个水平。暂且把其看作是我胡思乱想的出来的结论吧。
另外,如果师傅们有更好的方式能够使易语言的优势发挥出来,还请师傅不吝赐教。 我的邮箱 makefoxm@qq.com
本文探讨了易语言和Python的结合使用,通过不同方式如DOS调用、直接执行Python语句、数据库作为中介等实现两者交互。强调易语言在GUI界面方面的便捷和Python在功能实现上的优势,提出利用数据库作为‘中间件’来协调两者操作,以实现更高效的程序设计。
5338

被折叠的 条评论
为什么被折叠?



