通过 Python 实现命令行快速打开网页

发布于 2024-08-26 07:15:35 字数 5188 浏览 18 评论 0

看了 @zoejane 同学写的用 python 打开网页的 代码 o.py ,觉得很棒。

截取里面的一段

if address == 'udemy':
    url = 'https://www.udemy.com/automate/learn/'
elif address == 'gb':
    url= 'https://zoejane.gitbooks.io/zoe-py-tutorial/content/'
elif address == 'gh':
    url ='https://github.com/zoejane'
elif address =='edit':
    url ='https://www.gitbook.com/book/zoejane/zoe-py-tutorial/edit'
elif address  == 'en':
    url ='https://app.yinxiang.com/Home.action'

这一段代码的智慧在于,将网址和简称进行了一个映射,然后想用 python 打开网页时就不用输入很长的网址,而是输入一个简称就行。

比如,不用输入

python o.py https://zoejane.gitbooks.io/zoe-py-tutorial/content/

而是输入

python o.py gb

之前在看 webbrowser 库 官方文档 时,了解到能在命令行中用下面这个命令来打开 python 官网

python -m webbrowser -t "http://www.python.org"

那么我就在想,能否在 zoejane 同学代码的基础上进行改进,实现命令行输入 python -m o gbpython -m o gb 能快速打开我的 gitbook 主页和 github 主页这样的功能。

寻找 python 默认模块存储的地址

首先我将 shell 的工作目录定到 o.py 的所在目录,命令行运行 python -m o gb ,成功打开指定网页。之后再将 shell 的工作目录定到其他目录,运行命令,出错,出错信息为

/Users/alan/anaconda/bin/python: No module named o

然后我就思考,有没有方法,无论 shell 的工作目录在哪,我都可以直接使用 python -m o 这样的命令。

首先在网上 简单搜索 了一下,在浏览的过程中想到,python 能直接调用 webbrowser,那是不是 webbrowser.py 所在的路径就是 python 存放默认模块的地址呢?

于是我在 Spotlight 里搜 webbrowser.py,发现路径是

/Users/alan/anaconda/lib/python2.7/webbrowser.py

因为我装了 anaconda,所以路径跟 Mac 下默认的 python 路径不一样。我在同学的电脑上也搜了下,她因为装了 spss23(里面附带安装了 python),webbrowser.py 所在的路径更奇怪。

Anyway, 找到这个路径之后,我把 o.py 放到 /Users/alan/anaconda/lib/python2.7/ 里,也就是 webbrowser.py 的同级目录里。

之后在 shell 里运行 python -m o gb ,成功打开 gitbook 网页。换个 shell 工作目录,同样运行成功。

进行个人定制

接着要做的,就是定制自己的常用网站和缩写。

首先把我常用的网页和缩写写进一个字典结构里

my_link = {}
my_link['gitbook'] = 'https://wp-lai.gitbooks.io/learn-python/content/'
my_link['github'] = 'https://github.com/wp-lai?tab=repositories'
my_link['omooc2py'] = 'https://github.com/OpenMindClub/OMOOC2py/issues'

之后写一个 if 语句,如果输入信息在缩写列表里,要打开的地址就改为缩写对应的网址,否则打开用户输入的地址。

url = sys.argv[1]
if url in my_link: url = my_link[url]

接着在加一个忽略大小写的功能,让 python -m o GitHub 这样的命令也能识别

url = sys.argv[1]
if url.lower() in my_link: url = my_link[url.lower()]

最后将文件名改为 openweb.py ,这样就 ok 了。

最终代码为

import webbrowser,sys

my_link = {}
my_link['gitbook'] = 'https://wp-lai.gitbooks.io/learn-python/content/'
my_link['github'] = 'https://github.com/wp-lai?tab=repositories'
my_link['omooc2py'] = 'https://github.com/OpenMindClub/OMOOC2py/issues'

url = sys.argv[1]
if url.lower() in my_link: url = my_link[url.lower()]

webbrowser.open(url)

然后测试,分别在命令行运行

python -m openweb GItbook
python -m openweb github
python -m openweb OMOOC2py

成功打开我的 gitbook 主页、github 主页、和 omooc2py issue 页。mission complete。

进一步改进设想

对我来说,做到这一步的功能就能实现我的日常使用了。

如果还要进一步地改进,我觉得可以

  • 创建一个 excel 表格,将网址和缩写填进去
  • 在 openweb.py 里面添加一块代码,读取 excel 里信息,写进 my_link 这个字典里
    • 或者另写一个脚本,功能是读取 excel 里信息,写进 openweb.py 的 my_link 里

ps:关于 python 模块的路径其实都存在 sys.path 这个链表里,所以可以用 print sys.path 来显示所有路径,如果想显示得更美观些,可以用

import sys
for i in sys.path:
    print i

或者

import sys
print '\n'.join(sys.path)

当 python import 一个模块时,python 会在所有这些路径里寻找。

pps:我在 webbrowser.py 的 源码 基础上加了几句语句,写了另一个版本的 openweb.py,实现的是同样的功能。代码如下

from webbrowser import *
import sys

my_link = {}
my_link['gitbook'] = 'https://wp-lai.gitbooks.io/learn-python/content/'
my_link['github'] = 'https://github.com/wp-lai?tab=repositories'
my_link['omooc2py'] = 'https://github.com/OpenMindClub/OMOOC2py/issues'

def main():
    import getopt
    usage = """Usage: %s [-n | -t] url
    -n: open new window
    -t: open new tab""" % sys.argv[0]
    try:
        opts, args = getopt.getopt(sys.argv[1:], 'ntd')
    except getopt.error, msg:
        print >>sys.stderr, msg
        print >>sys.stderr, usage
        sys.exit(1)
    new_win = 0
    for o, a in opts:
        if o == '-n': new_win = 1
        elif o == '-t': new_win = 2
    if len(args) != 1:
        print >>sys.stderr, usage
        sys.exit(1)

    if args[0].lower() in my_link:
        url = my_link[args[0].lower()]
    else:
        url = args[0]
    open(url, new_win)

    print "\a"

if __name__ == "__main__":
    main()

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据

关于作者

昔梦

暂无简介

文章
评论
25 人气
更多

推荐作者

櫻之舞

文章 0 评论 0

弥枳

文章 0 评论 0

m2429

文章 0 评论 0

野却迷人

文章 0 评论 0

我怀念的。

文章 0 评论 0

    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文