39、【Ubuntu】【远程开发】拉出内网 Web 服务:构建静态网页(二)

【声明】本博客所有内容均为个人业余时间创作,所述技术案例均来自公开开源项目(如Github,Apache基金会),不涉及任何企业机密或未公开技术,如有侵权请联系删除

背景

上篇 blog
【Ubuntu】【远程开发】拉出内网 Web 服务:构建静态网页(一)

介绍了如何用 Sphinx 生成网页 HTML,并介绍了如何将网页从内网拉出来进行访问,下面继续

拉出内网 Web 服务

下面再分析下 python3 -m http.server 2025 这个命令,该命令通过使用 Python 内置模块,可以快速启动一个简易 HTTP 服务器,下面来逐项分析

  • python3:调用 Python3 解释器,本质上也是个二进制命令

  • -m:运行一个 Python 模块作为脚本,等会儿详细讲下

  • http.serverPython 标准库中的模块 ,可以提供基本的 HTTP 服务器功能

  • 2025:指定服务器监听的端口号为 2025

OK,再详细讲下 -m 选项,在终端输入

bash 复制代码
man python3

可以找到 -m 选项的描述如下

有几个点说下:

  • 首先,Python 会在 sys.path中查找指定的模块名,比如这里是 http.serversys.path 是一个包含多个目录路径的列表,这个列表包括当前工作目录,标准库目录(比如 /usr/lib/python3.x/),第三方包安装目录(比如 site-packages),环境变量 PYTHONPATH 中的路径,所以 -m http.server 实际上是在这些地方找 http/server.py,在终端输入
bash 复制代码
find /usr/lib/python3* -name "server.py" -path "*/http/*"

可以看到,其路径如下

  • 找到对应模块后,Python 会像运行普通脚本一样执行这个模块 ,但有一个关键区别:Python 会把该模块所在目录加入 sys.path,此时模块的 name 会被设置为 main此时和直接运行 .py 文件的效果一样,这样模块内部就可以写 if __name__ == '__main__': 来定义该模块作为脚本运行时的行为 ,比如 http.server 里就有这样的实现,所以可以直接启动服务器
  • -m module_name 开始,后面的所有命令行参数都不再被 Python 解释器当作选项,而是全部传递给这个模块本身 ,也就是说,-m 将是 Python 解释器的最后一个选项 ,之后的内容都是给模块用的 命令行参数,作为 sys.argv[1:] 传给该模块

OK,-m 选项分析完了,接下来再分析下这里的参数 2025,这里命令上虽然没有说明,但是从 server.py 源码里可以看出来,2025 指的就是端口 port

可以看到

  • port:这个参数没有 - 前缀,表示这是一个位置参数
  • nargs='?':表示这个参数是可选的,可以没有,也可以有
  • default=8000:如果没有这个参数,就默认用 8000一般是本地开发,测试 Web 服务时的默认端口之一 ),因为 8000 接近 80HTTP 默认端口 ),容易记忆,所以本地开发版网站一般在端口 8000 调试完成后,再升级到端口 80 作为正式网站
  • type=int:会自动把输入转成整数

这里再解释下位置参数选项参数的区别

  • 位置参数 :无前缀,不带 - 或者 --顺序很重要 ,比如 port 这个参数在解析顺序里是第一个位置参数,那么 server.py 收到的第一个不带选项的参数,就是这个 port 参数,但其实 port 也是最后一个位置参数,相当于是唯一的位置参数
  • 选项参数 :带前缀 -(短选项)或者 --(长选项),对顺序来说不重要,比如上面的 -d-p

所以这里出现的第一个参数 2025,不带选项,而 server.py 里面有且仅有一个位置参数,那当然就是 port 端口参数了


OK,本篇先到这里,如有疑问,欢迎评论区留言讨论,祝各位功力大涨,技术更上一层楼!!!更多内容见下篇 blog
【Ubuntu】【远程开发】拉出内网 Web 服务:后台运行(一)

相关推荐
不爱写程序的东方不败6 分钟前
APP接口测试流程实战Posman+Fiddler
前端·测试工具·fiddler
Doro再努力18 分钟前
【Linux05】Linux权限管理深度解析(二)
linux·运维·服务器
鱼跃鹰飞1 小时前
Leetcode:97.交错字符串
linux·服务器·leetcode
晚霞的不甘1 小时前
Flutter for OpenHarmony构建全功能视差侧滑菜单系统:从动效设计到多页面导航的完整实践
前端·学习·flutter·microsoft·前端框架·交互
黎子越1 小时前
python相关练习
java·前端·python
一叶龙洲1 小时前
解决Vmware Ubuntu共享文件夹有时无法识别
ubuntu
Doro再努力1 小时前
【Linux操作系统07】包管理器与Vim编辑器:从理论到实践的全面解析
linux·编辑器·vim
北极糊的狐2 小时前
若依项目vue前端启动键入npm run dev 报错:不是内部或外部命令,也不是可运行的程序或批处理文件。
前端·javascript·vue.js
XRJ040618xrj2 小时前
Nginx下构建PC站点
服务器·前端·nginx
We་ct2 小时前
LeetCode 289. 生命游戏:题解+优化,从基础到原地最优
前端·算法·leetcode·矩阵·typescript