Python 写了一个命令行火车票查看器.

2016-06-11 15:12:33 +08:00
 protream

docopt 真是写命令行应用的神器啊, 刚撸了一个命令行查询火车余票的工具,tickets, 命令行下输入:

$ tickets 上海 北京 2016615

或者添加参数, 如 -dt获取动车和特快,

$ tickets -dt 上海 北京 2016615

结果如下,

其他参数

项目已经提交到github 和 PyPI, 大家可以查看源码, 或

$ pip install tickets

安装使用.

8753 次点击
所在节点    Python
70 条回复
aristotll
2016-06-11 15:25:15 +08:00
![3 个 example 都报错]( )
protream
2016-06-11 15:39:43 +08:00
@aristotll 我是在 Ubuntu 下写的, Windows 下没有测试, 要不你帮忙看看哪有问题, 帮忙改一个啊。新手务怪。
Allianzcortex
2016-06-11 15:50:34 +08:00
挺有意思的一个应用。 argparser + termcolor 应该也可以
xiahei
2016-06-11 15:52:09 +08:00
挺不错, Mark.
imn1
2016-06-11 15:54:37 +08:00
@protream
有可视的返回信息,而不是报错,估计是编码问题
xsxsxszs
2016-06-11 15:55:24 +08:00
挺有意思的 哈哈 赞一个
protream
2016-06-11 16:03:38 +08:00
@imn1 我觉得也是, 能帮忙看看吗, 我现在身边没有 Windows 系统
krivol
2016-06-11 16:04:47 +08:00
赞一个
9hills
2016-06-11 16:09:49 +08:00
@protream
@imn1
看代码就知道,你判断某个站是通过查表实现的,表的 key 是站名( utf8 )。表存储也是 utf8 存储的。所以在 Linux 上没有问题。

Windows 上默认命令行编码近似为 GBK ,自然就在表中查不到 key 。修复方法:

1. 快速版:用 sys.stdin.encoding 拿到输入的编码,然后做输入编码转换,转换为 utf8 查找
2. 最佳实践:同上,但是所有输入全部转换为 unicode ,读的站名表也转换为 unicode ,再去查表。
protream
2016-06-11 16:12:46 +08:00
@9hills 感谢。看来我还需要再补补编码的知识。
aristotll
2016-06-11 16:19:21 +08:00
@protream 类似这样是能取到的 from_station_code = stations.get(arguments['<from>'].decode('gbk').encode('utf8'))
imn1
2016-06-11 16:20:06 +08:00
@aristotll
先运行"chcp 65001"(只需一次),再运行程序试试?

@protream
我 win 也没装 py ,但 win 简体,默认是 codepage936 ,也就是 GBK(非 GB2312)
如果让 1 楼上面这个成功,就是编码问题,输入的是 GBK 编码,转换一下就行
aristotll
2016-06-11 16:20:10 +08:00
@9hills 我 sys.stdin.encoding 还是取到'utf-8' 怎么才能取到'gbk'啊
9hills
2016-06-11 16:27:19 +08:00
@aristotll windows 上?,我这里实测可以
C:\Python27>python
Python 2.7.8 (default, Jun 30 2014, 16:03:49) [MSC v.1500 32 bit (Intel)] on wi
32
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> print sys.stdin.encoding
cp936
>>>
Allianzcortex
2016-06-11 16:28:54 +08:00
所以最终原则是不要在 Windows 下编码,否则 GBK 会把你弄疯的。看了一下源码,其实是不用手动构造 query_url 的。 requests 里有一个参数是 params,直接用一个 dict 传进去就可以了。
cashew
2016-06-11 16:34:35 +08:00
Ubuntu 下完美运行。不错。
21grams
2016-06-11 16:48:59 +08:00
先 star 一个慢慢看
heraldboy
2016-06-11 17:34:11 +08:00
不错, mac 下没问题。
protream
2016-06-11 17:38:48 +08:00
@Allianzcortex 谢谢指点。不知道为什么, 请求 12306 的参数顺序不对得不到数据,而用 dict 传参会打乱参数顺序
protream
2016-06-11 17:49:08 +08:00
@Allianzcortex 改用 OrderedDict 了

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/284909

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX