Python的动态重新封装的教程

论坛 期权论坛 脚本     
niminba   2021-5-23 03:00   1087   0

让我们描绘一下本文的情节:假设您要在本地机器上运行一个进程,而部分程序逻辑却在另一处。让我们特别假设这个程序逻辑会不时更新, 而您运行进程时,希望使用最新的程序逻辑。有许多方法可以满足刚提到的要求;本文将向您说明其中几种方法。

随着“可爱的 Python”专栏不断进行,已经讨论了我的公共域实用程序 Txt2Html 的正在进行的增强。该实用程序将“智能 ASCII”文本文件转换成 HTML。以前的文章讨论了实用程序的 Web 代理版本和实用程序的 curses 界面。同样,我偶尔注意到可以用更有效的方法转换某些 ASCII 标记,或者解决了一个在处理某个特殊标记结构中的错误。

事实上,本专栏的文章都是用 ASCII 编写的,然后在编辑过程中转换成您可以阅读的 HTML 格式。在发表文章草稿之前,我运行了类似以下处理的程序:
文章的命令行 HTML 化

txt2html charming_python_7.txt > charming_python_7.html

如果愿意,我可以指定一些标志来修改操作;但不管怎样,事实上转换器的最新版本在我的本地驱动器和路径中。如果在另一台机器上工作,或者对于要使用该实用程序的读者,则过程比较麻烦:请访问我的网站,注意比较版本号和文件日期(有时更改太小,我不会更改版本号),下载当前版本、将当前版本复制到正确目录,然后运行命令行转换器。(请参阅本文后面的 参考资料。)

以上的过程包括几个需要手工操作且比较费时的步骤。应该更简单,而且可以做到这点。
命令行 Web 访问

大多数人认为 Web 是在 GUI 环境中交互式浏览页面的一种方法。那样做当然很好,但命令行中也有许多功能。带文本模式 Web 浏览器 lynx 的系统完全可以将整个 Web 看作是命令行工具使用的另一个文件集。例如,我发现有些命令很有用:
使用 lynx 进行命令行 Web 浏览

lynx -dump http://gnosis.cx/publish/.
lynx -dump http://ibm.com/developerworks/. > ibm_developer.txt
lynx -dump http://gnosis.cx/publish | wc | sed "s/( *[0-9]* *\)\([0-9]*\)\(.*\)/\2/g"

第一行说:“将 David Mertz 的主页(以 ASCII 文本)显示到控制台。”第二行说:“将 IBM 的当前 developerWorks 主页的 ASCII 版本保存到文件。”第三行示例说:“显示 David 主页的字数。”(不必担心细节,它只显示与管道结合的命令行工具。)

关于 lynx,有一点要注意它(使用 -dump 选项时)执行几乎与 Txt2Html 完全相反的操作:前一种工具将 HTML 转换成文本;而后一种工具则转换成其它格式。但没有理由不使用与 lynx 一样流行的 Txt2Html。可以使用一个很短的 Python 脚本完成这个操作:
'fetch_txt2html.py' 命令行转换器

 import sys
 from urllib import urlopen, urlencode
 if len(sys.argv) == 2:
  cgi = 'http://gnosis.cx/cgi/txt2html.cgi'
  opts = urlencode({'source':sys.argv[1], 'proxy':'NONE'})
  print urlopen(cgi, opts).read()
       else:
  print "Please specify URL for Txt2Html conversion"

要运行这个脚本,只要执行如下操作:

python fetch_txt2html.py http://gnosis.cx/publish/programming/charming_python_7.txt

这并没有向您提供本地 Txt2Html 处理的全部开关,但如有必要,添加它们也很容易。可以像使用任何命令行工具一样来输送和重定向输出。但是,在上述版本中,只能处理 URL 可以到达的数据文件,而不能处理本地文件。

实际上, fetch_txt2html.py 可以完成 lynx 不能完成的任务(Txt2Html 本身也不能):它不仅从 URL 取得数据源,而且还远程获取 程序逻辑 。如果使用 fetch_txt2html.py ,就 不必在本地机器上安装 Txt2Html;将(使用最新版本)远程调用处理,并且将把结果发送回来,就像运行的是本地进程。很棒吧?Txt2Html 的本地版本可以访问远程 URL,就像访问本地文件一样,但它还不能保证它自身是最新的……!

动态初始化

使用 fetch_txt2html.py 确保了在转换中始终使用最新的程序逻辑。但是,这个方法可以完成的另一件事情是将处理器(和内存)的需求转移给 gnosis.cx Web 服务器。此特殊进程的负载并不是特别高,但人们却很可能认为在客户机上处理的其它类型的进程会更有效且令人满意。

组织 Txt2Html 的方式 -- 也就是组织大多数程序的方式 -- 是用一些由各种实用函数提供的核心流量控制函数。尤其是这些实用函数是一些经常更新的函数;核心函数( main() 和一些其它函数)只有在做重大改写时才Jz[

分享到 :
0 人收藏
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

积分:1060120
帖子:212021
精华:0
期权论坛 期权论坛
发布
内容

下载期权论坛手机APP