python-将一个原有的winform程序包装成web服务

历史遗留下来的程序,可能没有提供编程接口,但是又需要将这个程序的功能被其它代码调用。刚好做了类似一个系统间

集成的例子。 Web 形式的OA 要集成 原有 winform 的短信息发送程序。

方法是:

    首先将原窗口程序包装成可调用的函数模块,请参考之前文章:    Python - 将window 窗口操作过程包装成脚本函数可被调用 

    然后将此函数再次包装成 web 服务



SMsWebproxy.py

通过 http://xxxxxx:8000/putmsg/手机号码/信息文本   的方式就可以调用发送短信了。


  1 #! /usr/bin/python
  2 # -*- coding: gbk -*-
  3 
  4 # SmsWebProxy.py
  5 #
  6 # Copyright (C) 2012 - xulong 
  7 #
  8 import time
  9 import BaseHTTPServer, SocketServer, urllib, urllib2, urlparse
 10 import hashlib
 11 import math
 12 import traceback
 13 import string
 14 import os
 15 import re
 16 import threading
 17 from QXT_CTRL import QXT_Send
 18 allow_client=['192.168.1.113','192.168.1.9']
 19 msgqueue = []
 20 acitve = True
 21 class  SmsWebProxyProxyHandler(BaseHTTPServer.BaseHTTPRequestHandler):
 22 
 23     def do_GET(self):
 24         # path check
 25         client_ip,t=self.client_address
 26         #print self.path , client_ip
 27 
 28 
 29 
 30         flag = '/putmsg/'
 31         if client_ip in allow_client and self.path.startswith(flag) :
 32             #Get Music ID
 33             raw_str = urllib.unquote(self.path).decode('utf8').encode('gbk')[len(flag):]
 34 
 35             phones = raw_str[0:raw_str.find('/')]
 36             msg=raw_str[raw_str.find('/')+1:]
 37             #print 'phones:',phones , 'msg:',msg 
 38             msgqueue.append((phones,msg))
 39 
 40             self.send_response(200)
 41             self.send_header("content-type","text/html")
 42             self.end_headers()
 43             self.wfile.write("OK")
 44             self.connection.close()
 45             #print "msgqueue",msgqueue
 46             return
 47 
 48 
 49 class ThreadingHTTPServer(SocketServer.ThreadingMixIn, BaseHTTPServer.HTTPServer):
 50     pass
 51 
 52 class webserver(threading.Thread):
 53     def __init__(self):
 54         threading.Thread.__init__(self)
 55 
 56     def run(self):
 57         httpd = ThreadingHTTPServer(('', 8000),SmsWebProxyProxyHandler )
 58         httpd.serve_forever()
 59 class sender(threading.Thread):
 60     def __ini__(self):
 61         threading.Thread.__init__()
 62 
 63     def run(self):
 64         while acitve:
 65             if len(msgqueue) >0:
 66                 (p,m)= msgqueue.pop()
 67                 QXT_Send(p,m)
 68             time.sleep(0.01)
 69 
 70 
 71 
 72 
 73 def main():
 74 
 75     ws = webserver()
 76     ws.setDaemon(True)
 77     ws.start()
 78     sd = sender()
 79     sd.setDaemon(True)
 80     sd.start()
 81 
 82     print ''
 83     print '                           ####                          '
 84     print '                         ########                         '
 85     print '                         ########                         '
 86     print '###########################################################'
 87     print 'XXXXX-接口服务程序已启动'
 88     print '请勿关闭此服务程序,请保持XXXXX程序也在运行中!!!'
 89     print '###########################################################'
 90     print '                         ########                          '
 91     print '                         ########                          '
 92     print '                           ####                          '
 93     while True:
 94         ins = raw_input("")
 95         time.sleep(0.01)
 96     #httpd = ThreadingHTTPServer(('', 8000),SmsWebProxyProxyHandler )
 97     #httpd.serve_forever()
 98     #acitve = False
 99 
100 
101 if __name__ == '__main__':
102     main()
103 
104 
105 
106 
107 


你可能感兴趣的:(SendInput,python,SendKeys,Python)