【XMLRPC实现跨语言编程】Tcl <----> python
转载请声明出处,谢谢合作。
# 期望一种能实现tcl、python两者解释器能双向通讯的结合体
# py->tcl: from Tkinter import Tcl; tcl = Tcl(); tcl.eval('')
# tcl->py: 通过xmlrpc机制
具体实现如下
python服务器端:
import os
import SimpleXMLRPCServer
import time, threading
from Tkinter import Tcl
from selenium import webdriver #os.system('taskkill /F /IM python.exe') # 切换当前目录至ATOP
print os.path.abspath(os.curdir)
G_ATOP = '%s%sATOP'%(os.getenv('TCLSPACE'), os.sep)
os.chdir(G_ATOP)
print os.path.abspath(os.curdir) # 创建Tcl解释器(自带默认是tcl8.5)、快捷调用函数
# G_Tcl = Tcl() ;# 设置环境变量TCL_LIBRARY=D:/tclSpace/Tcl/lib/tcl8.6 反的
# def t(cmd):
# return G_Tcl.eval(cmd) # 这里会各种找不到package: 注意把需要用到的扩展包都放在TCLLIBPATH中,这样可以共用
# 同时编译py下的tcl8.5为tcl8.6
# t('source lib/tclcommon.tcl') # Start xmlrpcServer
#
_b = 'global_var'
class MyObject:
def XMLRPCCMD_py(self,word):
global _b
#_b = G_ChromeBrowser ;# exec中只能与局部变量交互
_ret = '' ;# exec中只能与局部变量交互
#pre = ''
try:
# RER = 1+3
exec(u'%s'%word)
# % word.decode('GB2312')
#G_ChromeBrowser = _b
except SyntaxError,e:
return "Error-Syntax: ",e
except NameError,e:
return "Error-Name: ",e
_ret=str(_ret)
print ' \'%s\'' %_ret
return _ret _obj = MyObject()
_server = SimpleXMLRPCServer.SimpleXMLRPCServer(("127.0.0.1", 23230))#, encoding='utf_8')
_server.register_instance(_obj)
def run_rpcSrv():
print "rpcServer Listening on port 23230, %s" %threading.current_thread().name
_server.serve_forever() #
# End xmlrpcServer # 新线程执行的代码:
print 'thread %s is running...' % threading.current_thread().name
_thread = threading.Thread(target=run_rpcSrv, name='Thread-RpcSrv')
_thread.start()
#t.join()
#print 'thread %s ended.' % threading.current_thread().name #t('source v4-MainCli.tcl')
tcl客户端:
package require base64
package require XMLRPC set DEBUG_XMLRPC 1 source lib/tclcommon.tcl
#f_Kills python.exe
#set pyId [open "|python lib/dv/py_rpcSrv.py"]
after 1000
puts "set url http://localhost:23230" set url "http://127.0.0.1:23230/RPC2"
XMLRPC::create "XMLRPCCMD_py" -proxy $url -params {word string} # 默认发命令且获取返回值 带-d时可打印调试信息 -t时仅发命令如[p {print 123} -t]
proc p {args} {
set ret ""
lassign [f_optsAna $args] argLs optLs
set cmd [f_str_chinese2u [lindex $argLs 0]]
set old_DEBUG_XMLRPC $::DEBUG_XMLRPC
set cmdSend "_ret=$cmd"
if {"-t" in $optLs} {set cmdSend $cmd}
if {"-d" in $optLs} {
puts " p {$cmdSend}"
set ::DEBUG_XMLRPC 1
}
if {[catch {set ret [::XMLRPCCMD_py $cmdSend]} ::err]} {
set ::DEBUG_XMLRPC $old_DEBUG_XMLRPC
error $::err
}
set ::DEBUG_XMLRPC $old_DEBUG_XMLRPC
return $ret
}
;
特别注意:
1、WIN 7下若使用本机测试,则写127.0.0.1会比较好,localhost有可能会解析失败而导致连接不成功。
2、tcl的包用teacup安装,python pip。
【XMLRPC实现跨语言编程】Tcl <----> python的更多相关文章
- 跨语言学习的基本思路及python的基础学习
笔者是C#出身,大学四年主修C#,工作三年也是C#语言开发.但在学校里其他的语言也有相应的课程,eg:Java,Php,C++都学过,当然只是学了皮毛(大学嘛,你懂得),严格来说未必入门,但这些语言的 ...
- Golang、Php、Python、Java基于Thrift0.9.1实现跨语言调用
目录: 一.什么是Thrift? 1) Thrift内部框架一瞥 2) 支持的数据传输格式.数据传输方式和服务模型 3) Thrift IDL 二.Thrift的官方网站在哪里? 三.在哪里下载?需要 ...
- 9 本免费的 Python 语言编程书籍(转载)
9 本免费的 Python 语言编程书籍 原文地址:http://linuxtoy.org/archives/9-free-python-books.html 2010-03-03 Toy Poste ...
- 转:Python语言编程学习资料(电子书+视频教程)下载汇总
开发工具: Python语言集成开发环境 Wingware WingIDE Professional v3.2.12 Python语言集成开发环境 Wingware WingIDE Professio ...
- Apache Thrift 跨语言服务开发框架
Apache Thrift 是一种支持多种编程语言的远程服务调用框架,由 Facebook 于 2007 年开发,并于 2008 年进入 Apache 开源项目管理.Apache Thrift 通过 ...
- Apache Thrift - 可伸缩的跨语言服务开发框架
To put it simply, Apache Thrift is a binary communication protocol 原文地址:http://www.ibm.com/developer ...
- Java跨语言调用,使用JNA访问Java外部接口
1. JNA简单介绍 先说JNI(Java Native Interface)吧,有过不同语言间通信经历的一般都知道,它允许Java代码和其他语言(尤其C/C++)写的代码进行交互,只要遵守调用约定即 ...
- thrift框架总结,可伸缩的跨语言服务开发框架
thrift框架总结,可伸缩的跨语言服务开发框架 前言: 目前流行的服务调用方式有很多种,例如基于 SOAP 消息格式的 Web Service,基于 JSON 消息格式的 RESTful 服务等.其 ...
- 【转】Apache Thrift - 可伸缩的跨语言服务开发框架
Apache Thrift - 可伸缩的跨语言服务开发框架 Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.本文将从 Java 开发人员角度详 ...
随机推荐
- iomanip.h
http://baike.baidu.com/link?url=zuNLgcUVylhUYYefyV13F38NChIMx8nnCEWV5zkkTQMrrSdKPxUERZuydSHtp6sXukWv ...
- UVA 11354 Bond(MST + LCA)
n<=50000, m<=100000的无向图,对于Q<=50000个询问,每次求q->p的瓶颈路. 其实求瓶颈路数组maxcost[u][v]有用邻接矩阵prim的方法.但是 ...
- BZOJ 2243: [SDOI2011]染色 (树链剖分+线段树合并)
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2243 树链剖分的点剖分+线段树.漏了一个小地方,调了一下午...... 还是要细心啊! 结 ...
- POJ3630Phone List(字典树)
参考http://s.acmore.net/show_article/show/58 以附上代码 #include<iostream> #include<stdio.h> #i ...
- iOS-default.png启动图片
我在xcode5下写的代码,我下载了iOS6的模拟器,我用iOS6和iOS7的模拟器切换运行,有的时候可以运行有的时候不可以运行,报错: 2013-11-17 16:49:04.049 sim[474 ...
- django控制admin的model显示列表
class goods(models.Model): name = models.CharField(max_length=300) price = models.IntegerField ...
- ECSHOP数据表结构完整仔细说明教程
From:http://www.ecshop119.com/ecshopjc-868.html s_account_log //用户账目日志表 字段 类型 Null 默认 注释 log_id medi ...
- Sonatype Nexus 搭建Maven 私服
国内私募机构九鼎控股打造APP,来就送 20元现金领取地址:http://jdb.jiudingcapital.com/phone.html 内部邀请码:C8E245J (不写邀请码,没有现金送) 国 ...
- 删除链表中全部值为k的节点
1. 问题描写叙述 给定一个单链表,删除当中值为k的全部节点.比如:1→2→6→3→4→5→61 \to 2 \to 6 \to 3 \to 4 \to 5 \to 6,删除当中值为6的节点,返回:1 ...
- AlertView with password
1. setAlertViewStyle:UIAlertViewStyleSecureTextInput UIAlertView *alertView = [[UIAlertView alloc] i ...