SimpleHTTPServer是python自带的一个简单的静态HTTP服务器, python2.x下只要切换到想要共享的目录简单地输入下面的命令,就可以打开该HTTP服务器:

python -m SimpleHTTPServer [port]

其中,port是可选参数,用于指定使用的端口,默认使用的是8000端口。

在python3.x中,SimpleHTTPServer模块被合并进了http.server模块中,所以,python3.x中命令略有不同:

python3 -m http.server [port]

打开服务器之后,只需在任何局域网设备浏览器中输入服务器ip:port就可以查看和下载服务器指定目录的文件。如下图所示:

图1. 浏览器展示的文件目录

这个文件服务器虽然简单,但却能充分利用局域网的带宽,为公司、家庭和学校等场景省去了U盘拷贝文件的烦恼。

当然,正由于简单它同样存在着很多缺陷,很重要的一点就是其不支持并发, 即不能同时有多个主机访问共享的目录。为了解决这个问题,重写这个模块:

python2.x:

#!/usr/bin python#encoding: utf-8

importsocketimportBaseHTTPServerfrom SimpleHTTPServer importSimpleHTTPRequestHandler as SHRHfrom SocketServer importForkingTCPServer as FTSclassForkingHTTPServer(FTS):pass

def main(ServerHandlers = SHRH, ServerClass =ForkingHTTPServer):

BaseHTTPServer.test(ServerHandlers, ServerClass)if __name__ == '__main__':print("Host_address:[%s]" %socket.gethostbyname(socket.gethostname()))

main()

python3.x

#!/usr/local/bin python3#encoding: utf-8

importsocketfrom socketserver importForkingTCPServer as FTSimporthttp.serverfrom http.server importSimpleHTTPRequestHandler as SHRHclassForkHTTPServer(FTS):pass

def test(ServerHandler=SHRH, ServerClass=ForkHTTPServer):

http.server.test(ServerHandler, ServerClass)if __name__ == '__main__':

ip_address=socket.gethostbyname(socket.gethostname())print("Server address:[%s]" %ip_address)

test()

上面的代码中ServerClass继承自ForkingTCPServer类,这个类是socketserver模块中ForkingMixIn和TCPServer的综合,前者实现了使用分支的方法实现了HTTP服务器的并发功能。

将代码保存为ForkHTTPServer.py, 然后将其移动至python的库目录下(我的python2.7为/usr/lib/python2.7;python3.4为/Library/Frameworks/Python.framework/Versions/3.4/lib),使用如下命令就可以启动并发版的简易静态文件服务器了:)

[python2.7]

python -m ForkHTTPServer [port]

[python3.4]

python3 -m ForkHTTPServer [port]

这个命令还是太麻烦,对于Linux或Mac用户可以更进一步,为该命令取别名:

vim ~/.bashrc

添加:

[python2.7]

alias share="python -m /usr/lib/python2.7/ForkStaticServer"

[python3.4]

alias share="python3 -m /Library/Frameworks/Python.framework/Versions/3.4/lib/ForkStaticServer"

这样,只要在终端中输入“share”命令就可以开去文件服务器了,很方便是吧:-D

python实现文件共享_改进的一行Python实现文件共享--支持并发相关推荐

  1. python编程基础_月隐学python第2课

    python编程基础_月隐学python第2课 学习目标 掌握变量的输入和输出 掌握数据类型的基本概念 掌握算数运算 1.变量的输入和输出 1.1 变量输入 使用input输入 input用于输入数据 ...

  2. 查看Python的版本_查看当前安装Python的版本

    一.查看Python的版本_查看当前安装Python的版本 具体方法: 首先按[win+r]组合键打开运行: 然后输入cmd,点击[确定]: 最后执行[python --version]命令即可. 特 ...

  3. 如何提高python的运行效率_几个提升Python运行效率的方法之间的对比

    在我看来,python社区分为了三个流派,分别是python 2.x组织,3.x组织和PyPy组织.这个分类基本上可以归根于类库的兼容性和速度.这篇文章将聚焦于一些通用代码的优化技巧以及编译成C后性能 ...

  4. python并行运算库_最佳并行绘图Python库简介:“ HiPlot”

    python并行运算库 HiPlot is Facebook's Python library to support visualization of high-dimensional data ta ...

  5. python可以干嘛知乎-一行Python代码能做什么?

    原标题:一行Python代码能做什么? 作者:笑虎 来源:知乎 首先你要了解一下Python之禅,一行代码输出"The Zen of Python": python -c &quo ...

  6. python了解一下_想要精通python?19个语法了解一下!

    原标题:想要精通python?19个语法了解一下! Python简单易学,但又博大精深.许多人号称精通Python,却不会写Pythonic的代码,对很多常用包的使用也并不熟悉.学海无涯,我们先来了解 ...

  7. python编程基础_月隐学python第一课

    1.概述 本文是用于描述本人学习python的过程,这是第1课情况. 2.学习目标 了解python基础知识 理解程序和程序翻译的两种形式 掌握使用pycham编程基本步骤 重点掌握变量定义 掌握数据 ...

  8. python opencv手册_教你用Python实现5毛钱特效(给你的视频来点料)

    一.前言 请务必看到最后.Python牛已经不是一天两天的事了,但是我开始也没想到,Python能这么牛.前段时间接触了一个批量抠图的模型库,而后在一些视频中找到灵感,觉得应该可以通过抠图的方式,给视 ...

  9. python新手难点_初学两天python的操作难点总结

    已经学习两天python,将我认为的操作难点进行总结 1 在cmd下 盘与盘之间的切换 直接 D或d: 就好 2 查找当前盘或者文件下面的目录 直接 dir 3 想在一个盘下进去一个文件夹,用cd空格 ...

最新文章

  1. lnmp上搭建zabbix
  2. China SAFe DAY 2020中国规模化敏捷大会圆满落幕
  3. 附录7:SciPy实例记录
  4. # 2021华为软件精英挑战赛C/C++——build.sh/build_and_run.sh/CodeCraft_zip.sh注释
  5. 深度学习核心技术精讲100篇(五十八)- 如何量化医学图像分割中的置信度?
  6. 分类mysql_MySql分类
  7. lombok快速入门:实体类中再也不用写setter和getter,toString等方法了
  8. .net多线程 Thread
  9. jquery实现导航栏鼠标点击后实行背景高亮,点击离开恢复(超级简单!!!!)...
  10. ASP.NET教程5
  11. python mysql ssl,python – 在SQLAlchemy中使用SSL
  12. C 语言实例 - 判断闰年
  13. 字段类型 mysql_mysql 常用字段类型
  14. java ab性能测试,服务器JAVA性能测试——SPECjbb2005
  15. Visual C# 2005——超好用的DropDown与DropDownClosed事件
  16. STM32 - L4系列芯片手册: 总线架构
  17. asterisk 服务器文档,用 Asterisk 搭建自己的免费 VoIP 服务器
  18. 台安变频器n2按键说明_台安变频器N2
  19. 基于PHP开发的云平台网络课堂教学学习互动平台设计
  20. 有些计算机病毒没有传染性,电脑病毒有没传染性介绍

热门文章

  1. Bind和Eval的区别详解(ZT)
  2. java get post 区别详解_[Java教程]GET 与 POST 其实没有什么区别
  3. react ajax 分页,一款简单的react分页组件
  4. 【数理知识】《数值分析》李庆扬老师-第3章-函数逼近与快速傅里叶变换
  5. 5.10 程序示例--模型选择-机器学习笔记-斯坦福吴恩达教授
  6. 记录一次quartus II prime standard 18添加器件库的方法
  7. Android system server之PackageManagerService详细分析
  8. 【进程通信】Socket
  9. 数学篇(一) 矩阵运算
  10. 简单算法题:leetcode-2 两数相加