【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 开发人员角度详 ...
随机推荐
- HDU 5762 Teacher Bo (暴力)
Teacher Bo 题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5762 Description Teacher BoBo is a geogra ...
- 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 ...
- Spring + JdbcTemplate + JdbcDaoSupport examples
In Spring JDBC development, you can use JdbcTemplate and JdbcDaoSupport classes to simplify the over ...
- Spring Autowiring by AutoDetect
In Spring, "Autowiring by AutoDetect", means chooses "autowire by constructor" i ...
- opencv 彩色图像亮度、对比度调节 直方图均衡化
直接上代码: #include <Windows.h> #include <iostream>// for stand I/O #include <string> ...
- Sql CLR
using System;using System.Data;using System.Data.SqlClient;using System.Data.SqlTypes;using Microsof ...
- MySQL Update语句用法
用一个表的某列值更新另外一个表的某列值的sql语句: update tableA a innner join tableB b on a.column_1 = b.column_1 set a.col ...
- linux 下安装apache 快速教程
最近自学linux,看鸟哥的文章.提到了apache,所以在虚拟机redhat 5下安装了一把, 结合国内外文章写下快速可行的教程: --------------------------------- ...
- map的正确删除方式
遍历删除map元素的正确方式是 for(itor = maptemplate.begin; itor != maptemplate.end(); ) { if(neederase) ...
- 剑指OFFER之矩形覆盖(九度OJ1390)
题目描述: 我们可以用2*1的小矩形横着或者竖着去覆盖更大的矩形.请问用n个2*1的小矩形无重叠地覆盖一个2*n的大矩形,总共有多少种方法? 输入: 输入可能包含多个测试样例,对于每个测试案例, 输入 ...