转载请声明出处,谢谢合作。

# 期望一种能实现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的更多相关文章

  1. 跨语言学习的基本思路及python的基础学习

    笔者是C#出身,大学四年主修C#,工作三年也是C#语言开发.但在学校里其他的语言也有相应的课程,eg:Java,Php,C++都学过,当然只是学了皮毛(大学嘛,你懂得),严格来说未必入门,但这些语言的 ...

  2. Golang、Php、Python、Java基于Thrift0.9.1实现跨语言调用

    目录: 一.什么是Thrift? 1) Thrift内部框架一瞥 2) 支持的数据传输格式.数据传输方式和服务模型 3) Thrift IDL 二.Thrift的官方网站在哪里? 三.在哪里下载?需要 ...

  3. 9 本免费的 Python 语言编程书籍(转载)

    9 本免费的 Python 语言编程书籍 原文地址:http://linuxtoy.org/archives/9-free-python-books.html 2010-03-03 Toy Poste ...

  4. 转:Python语言编程学习资料(电子书+视频教程)下载汇总

    开发工具: Python语言集成开发环境 Wingware WingIDE Professional v3.2.12 Python语言集成开发环境 Wingware WingIDE Professio ...

  5. Apache Thrift 跨语言服务开发框架

    Apache Thrift 是一种支持多种编程语言的远程服务调用框架,由 Facebook 于 2007 年开发,并于 2008 年进入 Apache 开源项目管理.Apache Thrift 通过 ...

  6. Apache Thrift - 可伸缩的跨语言服务开发框架

    To put it simply, Apache Thrift is a binary communication protocol 原文地址:http://www.ibm.com/developer ...

  7. Java跨语言调用,使用JNA访问Java外部接口

    1. JNA简单介绍 先说JNI(Java Native Interface)吧,有过不同语言间通信经历的一般都知道,它允许Java代码和其他语言(尤其C/C++)写的代码进行交互,只要遵守调用约定即 ...

  8. thrift框架总结,可伸缩的跨语言服务开发框架

    thrift框架总结,可伸缩的跨语言服务开发框架 前言: 目前流行的服务调用方式有很多种,例如基于 SOAP 消息格式的 Web Service,基于 JSON 消息格式的 RESTful 服务等.其 ...

  9. 【转】Apache Thrift - 可伸缩的跨语言服务开发框架

    Apache Thrift - 可伸缩的跨语言服务开发框架 Apache Thrift 是 Facebook 实现的一种高效的.支持多种编程语言的远程服务调用的框架.本文将从 Java 开发人员角度详 ...

随机推荐

  1. HDU 5762 Teacher Bo (暴力)

    Teacher Bo 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5762 Description Teacher BoBo is a geogra ...

  2. Configure the handler mapping priority in Spring MVC

    Often times, you may mix use of multiple handler mappings strategy in Spring MVC development. For ex ...

  3. Spring + JdbcTemplate + JdbcDaoSupport examples

    In Spring JDBC development, you can use JdbcTemplate and JdbcDaoSupport classes to simplify the over ...

  4. Spring Autowiring by AutoDetect

    In Spring, "Autowiring by AutoDetect", means chooses "autowire by constructor" i ...

  5. opencv 彩色图像亮度、对比度调节 直方图均衡化

    直接上代码: #include <Windows.h> #include <iostream>// for stand I/O #include <string> ...

  6. Sql CLR

    using System;using System.Data;using System.Data.SqlClient;using System.Data.SqlTypes;using Microsof ...

  7. MySQL Update语句用法

    用一个表的某列值更新另外一个表的某列值的sql语句: update tableA a innner join tableB b on a.column_1 = b.column_1 set a.col ...

  8. linux 下安装apache 快速教程

    最近自学linux,看鸟哥的文章.提到了apache,所以在虚拟机redhat 5下安装了一把, 结合国内外文章写下快速可行的教程: --------------------------------- ...

  9. map的正确删除方式

    遍历删除map元素的正确方式是 for(itor = maptemplate.begin; itor != maptemplate.end(); ) {      if(neederase)     ...

  10. 剑指OFFER之矩形覆盖(九度OJ1390)

    题目描述: 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入 ...