VB和python之间如何传递参数?

omg211 2016-10-21 08:22:38
众所周知,python的网络功能强大,但GUI功能很弱,我现在用VB来做界面,解析网页用py来做,用API函数ShellExecute来调用python,但是这两者之间如何传递参数是个麻烦事,我现在是把参数保存在数据库的一个表中,进行两者的传递,一个存一个取。
比方说我把一个网页地址输入到VB,保存到表中,然后调用py文件,该文件直接读取表中刚保存的链接进行处理,把处理结果再保存在表中,然后VB再从表中读取并显示出来。
但是这之间有个时间差,根本数据量,有时长些,有时短些,我在VB中用了一个休眠来处理这个问题,估算时间长些,用10秒来等待,有一些用时短的处理就有些耽误时间了,总体感觉挺low的。
所以我想问问,VB和python之间有没有其他的传递参数的通道?
...全文
5588 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
熊孩子开学喽 2019-04-19
  • 打赏
  • 举报
回复
可以通过tcp通讯来"交流" 即便不是同一台电脑都无妨.
xjzone 2018-05-10
  • 打赏
  • 举报
回复
我被这个问题困扰了很久,在很长一段时间内,我都是用这个帖子里的方法,通过创建、读取、删除临时文件来在VB程序和Python程序间传递信息,麻烦,且低级。 后来我终于找到了一本书(python programming on win32,有兴趣的下来看),终于发现了解决方法。COM组件!
引用
COM is a technology from Microsoft that allows objects to communicate without the need for either object to know any details about the other, even the language it's implemented in.
看看本书某章节的总结:
引用
We have seen examples of the various data types that can be passed back and forth between the two languages: numbers, strings, and arrays. The ability to pass multidimensional arrays allows you to move large amounts of data between the two languages without writing a lot of conversion code.
对于不想看书的人,我在这里提供一个书内的例子,这个简单的例子,已经可以解决很多混合编程的难题! 在Python里(Python3.6)
#需要先安装pipywin32模块
class PythonUtilities:

    _public_methods_=['SplitString']
    _reg_progid_='PythonDemos.Utilities'

    # 使用"print (pythoncom.CreateGuid())" 得到一个自己的clsid,不要用下面这个!!
    _reg_clsid_='{5FCAC95E-653A-484C-8568-A02D5E0256E8}'

    def SplitString(self, val, item=None):
        import string 
        if item !=None: 
            item=str(item)
        val=str(val)
        return val.split(item)

if __name__=='__main__':
    print ('Registering COM server...')
    import win32com.server.register
    win32com.server.register.UseCommandLine(PythonUtilities)
在VB里
Private Sub Form_Load()
    Set PythonUtils = CreateObject("PythonDemos.Utilities")
    response = PythonUtils.SplitString("Hello from VB")
    For Each Item In response
        MsgBox Item
    Next
End Sub
赵4老师 2018-01-08
  • 打赏
  • 举报
回复
馒头xworange 2018-01-08
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话,文本文件的格式问题可参考json或xml 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·…… “跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边, 回头是“使用共享纯文本文件进行信息交流”的岸!
真好用!谢谢老铁!
qq_40162481 2017-09-08
  • 打赏
  • 举报
回复
ramdisk速度之类都能保证,但是,怎么设置个ramdisk?
赵4老师 2016-10-25
  • 打赏
  • 举报
回复
A在发现文件bb.txt存在时,就知道B已经将结果保存并处理完了。因为B没处理完的文件是b.txt,处理完后才更名为bb.txt
赵4老师 2016-10-24
  • 打赏
  • 举报
回复
不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话,文本文件的格式问题可参考json或xml 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·…… “跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边, 回头是“使用共享纯文本文件进行信息交流”的岸!
omg211 2016-10-24
  • 打赏
  • 举报
回复
引用 2 楼 zhao4zhong1 的回复:
不要做A语言代码修改为B语言代码的无用功。 也不要做用A语言代码直接调用B语言代码库这样复杂、这样容易出错的傻事。 只需让A、B语言代码的输入输出重定向到文本文件,或修改A、B语言代码让其通过文本文件输入输出。 即可很方便地让A、B两种语言之间协调工作。 比如: A将请求数据写到文件a.txt,写完后改名为aa.txt B发现aa.txt存在时,读取其内容,调用相应功能,将结果写到文件b.txt,写完后删除aa.txt,改名为bb.txt A发现bb.txt存在时,读取其内容,读完后删除bb.txt 以上A可以替换为任何一种开发语言或开发环境,B可以替换为任何一种与A不同的开发语言或开发环境。 除非A或B不支持判断文件是否存在、文件读写和文件更名。 但是谁又能举出不支持判断文件是否存在、文件读写和文件更名的开发语言或开发环境呢? 可以将临时文件放在RamDisk上提高效率减少磨损磁盘。 数据的结构很复杂的话,文本文件的格式问题可参考json或xml 共享临时文本文件这种进程之间的通讯方法相比其它方法的优点有很多,下面仅列出我现在能想到的: ·进程之间松耦合 ·进程可在同一台机器上,也可跨机,跨操作系统,跨硬件平台,甚至跨国。 ·方便调试和监视,只需让第三方或人工查看该临时文本文件即可。 ·方便在线开关服务,只需删除或创建该临时文本文件即可。 ·方便实现分布式和负载均衡。 ·方便队列化提供服务,而且几乎不可能发生队列满的情况(除非硬盘空间满) ·…… “跨语言、跨机,跨操作系统,跨硬件平台,跨国,跨*.*的”苦海无边, 回头是“使用共享纯文本文件进行信息交流”的岸!
我现在也是用这种方法,现在的困难是A不知道B什么时候能处理完并且保存数据,我想着是B在处理完能给A发个消息之类的。
  • 打赏
  • 举报
回复
python本身是种解析性脚本语言,只能编译出运行于python解析器上的字节码文件,如pyc vb也可以直接调用python的程序 例: ShellExecute 0,"Open","c:\pyhthon25\Python.exe","C:\Mypython.py","",1 还有一个,可以通过在组件式GIS开发中集成Python来提高开发效率和质量

7,789

社区成员

发帖
与我相关
我的任务
社区描述
VB 基础类
社区管理员
  • VB基础类社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧