通过 Python 实现命令行快速打开网页
看了 @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 gb
和 python -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 技术交流群。

上一篇: Mac 下命令行的一些设置
下一篇: 彻底找到 Tomcat 启动速度慢的元凶
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论