第十二章:通信,web
1.浅谈通信
毫无疑问要用到socket(套接字)由于此章节和java异曲同工,就不再繁复地赘述,简单地运用几个例子来说明。
一个小型服务器和一个小型客户机:
服务器:
>>import socket
>>s=socket.socket()
>>host=socket.gethostname()
>>port=1234
>>s.bind((host,port))
>>s.listen(5)
>>while True:
c,addr=s.receive()
print(“from:”+addr)
c.send(“hello”)
c.close()
客户端:
>>import socket
>>s=socket.socket()
>>host=socket.gethostname()
>>port=1234
>>s.connect((host,port))
>>print(s.recv(1024))
用urllib.request打开远程文件
>>from urllib.request import urlopen
>>s=urlopen(‘http://www.baidu.com’)
获取远程文件
>>urlretrieve(‘http://www.baidu.com’,’文件路径+文件名’)
保存网址为文件
2.Python和万维网
简答的屏幕抓取程序
>>from urllib.request import urlopen
>>import re
>>p=re.compile(‘<h3><a .*?><a .*? href=”(.*?)”>(,*?)</a>’)
>>text=urlopen(‘http://baidu.com/’).read()
>>for url,name in p.findall(text)
print(name,url)
创建CGI网页
第一步:准备网络服务器
第二步:加入下列代码
#!/usr/bin/env python
简单的脚本:
#!/usr/bin/env python
print(Content-type:text/html)
print(‘hello’)
如果这个文件保存为.cgi格式,就可以允许了。
用cgi调试
#!/usr/bin/env python
import cgitb
print(Content-type:text/html)
print(1/0)
用cgi获取值
#!/usr/bin/env python
import cgi
from=cgi.fieldStorage()
name=from.getvalue(‘name’,’world’)
print(Content-type:text/plain)
print(name)
简单的表单:
#!/usr/bin/env python
import cgi
from=cgi.fieldStorage()
name=from.getvalue(‘name’,’world’)
print(Content-type:text/plain)
<html>
<head>
</head>
<body>
<from action=’hello.cgi’>
<input type=”text” name=”name”>
<input type=”submit”>
</from>
</body>
</html>
print(name)
3.Python的扩展
由于本人比较熟悉java,因此只扩展到java,其余的暂时不做说明。
扩展到java可以用Jython,安装完成后可以将.class文件放到Jython的java CLASSPATH中的某处或者当前目录中:
$ CLASSPATH=Demo.class jython
再将其作为模块导入
>>import Demo
>>test=Demo()
>>test.greet()
输出:hello world
在eclipse中点帮助-->安装软件,再填写软件名和网址,等待安装插件就可以了。安装成功之后在eclipse上配置python,新建PyDev项目和包就可以了。
4.程序打包
简单的distutils脚本
>>from distutils import setup
>>setup(name=’hello’,version=’1.0’,author=’zq’)
用python setup.py build创建hello.py的副本,运行python setup.py install安装模块。
打包:sdist命令
先运行python setup.py sdist,再运行include 1.txt就在MANIFEST.in文件清单下包含了1.txt。可以用py2exe来创建.exe执行程序。
5.日志记录
在程序的开头导入logging模块
>>import logging
>>logging.basicConfig(level=logging.INFO,filename=’mylog.log’)
>>logging.info(‘start’)
>>logging(‘计算:’)
>>print(1/0)
>>logging(‘OK~’)
程序会在异常的时候中断。
<!--EndFragment-->