资讯专栏INFORMATION COLUMN

Python实现命令行监控北京实时公交之二

fasss / 2618人阅读

摘要:链接前文实现命令行监控北京实时公交之一开头先放上效果展示在命令行输入,显示基本信息,如下在命令行输入,显示北京路公交车的位置,如下红色的说明在梅园附近有一辆公交车,并且会不断刷新。

链接前文:Python实现命令行监控北京实时公交之一


开头先放上效果展示

在命令行输入 python bus.py -i,显示app基本信息,如下:

在命令行输入 python bus.py 438,显示北京438路公交车的位置,如下:

红色的B说明在梅园附近有一辆438公交车,并且会不断刷新。

GitHub地址 - https://github.com/Harpsichor...


命令行显示输出及美化

前文我们实现了获取公交车位置的函数,现在需要将其美化并输出到命令行中,这里分别使用docopt/prettytable/colorama三个库。

prettytable库和colorama

简单来说,prettytable可以将数据以表格的形式打印,colorama可以设置命令行中字体的颜色,直接上代码:

from prettytable import PrettyTable
from colorama import Fore, init

# colorama需要init使用
init()

# 函数接受4个参数
# data0/data1分别是往返站点信息的list,其中的元素也是list,结构是["id", 站名, 是否有公交车]
# time0/time1是往返线路运营时间
def print_direction_and_station(data0, data1, time0, time1):
    pt = PrettyTable()
    # 设置表头,为了美观往返之间留一个空列
    pt.field_names = ["#0", "UP:" + time0, "Bus0", "   ", "#1", "DOWN:" + time1, "Bus1"]
    # 往返路线的站数可能不一致,取最大值作为行
    for i in range(max(len(data0), len(data1))):
        if i >= len(data0):
            r0 = [" "] * 3
        else:
            r0 = data0[i]
            # "B"表示该车站附近有公交车
            if r0[2] == "B":
                # 设置文本的颜色为红色
                r0[1] = Fore.RED + r0[1]
                # 去除红色,否则后面全是红的
                r0[2] = r0[2] + Fore.RESET
        if i >= len(data1):
            r1 = [" "] * 3
        else:
            r1 = data1[i]
            if r1[2] == "B":
                r1[1] = Fore.RED + r1[1]
                r1[2] = r1[2] + Fore.RESET
        pt.add_row(r0 + ["   "] + r1)
    # 打印结果
    print(pt)
docopt

docopt可以读取一段字符串(通常是__doc__),并将其解析为命令行参数,例如在bus.py开头输入以下内容:

"""
Usage:
    bus 
    bus [-ih]

Options:
    -h              Show help information
    -i              Show application information

Example:
    bus 438         Show stations, directions and positions of bus 438
"""

并使用from docopt import docopt引入模块,结尾代码如下:

if __name__ == "__main__":
    args = docopt(__doc__)
    print(args)

直接使用python bus.py运行,输出的结果是:

从中不难发现,docopt解析了__doc__Usage的部分,将参数以字典的形式返回,我们改变输入命令的参数,返回的args字典对应的value也将不同。


前文中我们获取的公交车位置信息需要经过一些处理才能传给print_direction_and_station函数,结合命令行参数,代码如下:

if __name__ == "__main__":
    args = docopt(__doc__)
    b_code = args[""]
    # 如果输入了参数
    if b_code:
        # 获取往返线路id
        [d0, _], [d1, _] = get_bus_direction(b_code)
        # 获取往返车站
        stations0 = get_bus_stations(b_code, d0)
        stations1 = get_bus_stations(b_code, d1)
        # 进入循环以刷新
        while 1:
            direction0 = []
            direction1 = []
            status0 = get_bus_status(b_code, d0, len(d0))
            status1 = get_bus_status(b_code, d1, len(d1))
            pos0 = status0["bus_position"]
            # pos0_id/pos1_id 是有公交车的车站id
            pos0_id = [p["station_id"] for p in pos0]
            pos1 = status1["bus_position"]
            pos1_id = [p["station_id"] for p in pos1]
            # 两个for循环构建传给print_direction_and_station参数
            for i, d in enumerate(stations0):
                bus = " "
                if str(i+1) in pos0_id:
                    bus = "B"
                direction0.append([i+1, d, bus])
            for i, d in enumerate(stations1):
                bus = " "
                if str(i + 1) in pos1_id:
                    bus = "B"
                direction1.append([i+1, d, bus])
            print_direction_and_station(direction0, direction1, status0["operation_time"], status1["operation_time"])
            # 每5s刷新一次
            sleep(5)

此时输入python bus.py 438,就可以显示上文图中的结果了,python bus.py -i也是同理,自定义一个print信息的函数即可。

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/41518.html

相关文章

  • Python实现命令监控北京实时公交之一

    摘要:开头先放上效果展示在命令行输入,显示基本信息,如下在命令行输入,显示北京路公交车的位置,如下红色的说明在梅园附近有一辆公交车,并且会不断刷新。 开头先放上效果展示 在命令行输入 python bus.py -i,显示app基本信息,如下: showImg(https://segmentfault.com/img/bV8gmb?w=644&h=454); 在命令行输入 python bu...

    vboy1010 评论0 收藏0
  • 高德地图 Javascript API 入门(六)

    摘要:高德地图入门六出行规划公交路径公交换乘服务,提供起终点公交路线规划服务,整合步行方式初始化加载公交线路插件实例化北京必须值,搭乘公交所在城市可选值,搜索结果的标注线路等均会自动添加到此地图上可选值,显示搜索列表的容器可选值,详细信息驾驶策略 高德地图 Javascript API 入门(六) 出行规划 公交路径 公交换乘服务,提供起、终点公交路线规划服务,整合步行方式 初始化 // 加...

    idisfkj 评论0 收藏0
  • 提高 JavaScript 开发效率的高级 VSCode 扩展之二

    摘要:将这些命令绑定到键盘快捷键是有帮助的,例如向上箭头用于平衡向外,而向下箭头用于平衡向内。是和的快速原型开发平台。 本系列的第一篇可以在这里看到: 提高 JavaScript 开发效率的高级 VSCode 扩展! showImg(https://segmentfault.com/img/bVbnn2j?w=1254&h=768); 想阅读更多优质文章请猛戳GitHub博客,一年百来篇优质...

    cyrils 评论0 收藏0
  • 那些有趣/用的 Python

    摘要:梁振英在星期二月日的答问大会开始之际在其演说中道歉,但强调他在违章建筑问题上没有隐瞒的意图和动机。 图片处理 pip install pillow from PIL import Image import numpy as np a = np.array(Image.open(test.jpg)) b = [255,255,255] - a im = Image.fromarray(...

    Pikachu 评论0 收藏0
  • 斯坦福新深度学习系统 NoScope:视频对象检测快1000倍

    摘要:通过利用一系列利用视频局部性的优化,显著降低了在每个帧上的计算量,同时仍保持常规检索的高精度。的差异检测器目前是使用逐帧计算的逻辑回归模型实现的。这些检测器在上的运行速度非常快,每秒超过万帧。也就是说,每秒处理的视频帧数超过帧。 视频数据正在爆炸性地增长——仅英国就有超过400万个CCTV监控摄像头,用户每分钟上传到 YouTube 上的视频超过300小时。深度学习的进展已经能够自动分析这些...

    xcold 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<