写点东西顺便吐槽(很弱很弱的技术文)
这次果断是不吐槽不行了,人人Python主页上曾经放出过关于如何用python更新校内状态的日志,但是其中还是有很多值得注意的地方,主页并没有在日志中说明,所以如果你直接按日志上的做的话,你就是个杯具啊,说不定还会是个餐具。本人经过亲身实践反复尝试各种抓狂砸键盘扔鼠标敲屏幕之后,得出一点经验之谈——在windows下利用python更新校内状态。(即使你对python一无所知)
当然在此需要先感谢人人Python主页为我们带来如此给力的代码。
首先,你当然非常以及及其还有相当需要阅读这篇日志《如何使用python更新校内状态》(评论的群众略显跑题了)。日志中的两段代码先下载好,一个命名成tuiServer.py,另一个命名成tuing.py,代码其实像看懂不难的,当然你的要有一定的python基础。然后按照日志中的提示,修改掉 tuiServer.py中的YOUR_MAIL和YOUR_PASSWORD。到这一步和日志上说的都是一样的。不过需要注意的一点是,日志上最后的那个效果图是linux下。
然后,检查下你的python版本,如果是3.x的,那下载下来的代码就需要进行大幅度的修改,所以建议如果有这样的童鞋,还是赶紧换成2.6 ,2.7的,毕竟现在网上的源代码也都是这些版本为主流的。
接着,打开tuiServer.py,我用的是IDLE,run module一下,报错:TabError:inconsistent use of tabs and spaces in indentation。这里可能是各种乱七八糟的原因(也可能是我自己的原因)代码中混用了tab和space两种缩进方式(缩进对于python很重要,基本概念可见http://www.cnpythoner.com/post/147.html),在IDLE下我没有找到太好的解决办法,只有一个个查,遇到报错就将该行的缩进方式统一改为空格缩进(手动的)。运行下tuiServer.py,看到下图这个情况就说明你这一步是成功了。
然后,打开tuing.py,这货就难搞多了。首先如果你是在IDE或者像我一样在IDLE上运行的话,可能到这一步就被强制退出程序了,因为这里我们还没有输入任何字符,所以sys.argv是等于1的,所以直接exit(1)就让我们歇菜了。其实这一段代码没什么太大作用,直接无视删掉好了。还有就是这里第一句也可以删掉,这个是在linux下用的。这个时候你运行下tuing.py(tuiServer.py要一直保持运行状态),基本上看到的就是这么副坑爹样
有人说为什么什么都没有呀,还真就是什么都没有,你的人人状态也不会更新,至于为什么,等下再说,我们先加点测试的代码,起码还先知道问题出在哪里。在tuing.py中,可以比较清晰地看出来是最后传递给主程序发到人人状态上的字符串是msg,就那就先在最后一行添加代码打印一下msg,
重新运行下,可以看到
,可以看到本来应该是{此消息通过tuing发送。}的部分在这里显示成乱码。终于反应过来,这段代码的字符编码是UTF-8的,但是windows下默认的中文编码是GBK,也就是说“{此消息通过tuing发送。}”的编码是UTF-8,而“坑爹啊”的字符编码是GBK,字符编码混乱,这也就是msg为什么没有被main()接受发送到人人上的原因。(这个地方不得不再次吐槽MS,这种操蛋问题只有在windows下面才会遇到!!!)为了能够比较直观地看出其中的差异,我做了一下测试(测试环境为win7下的命令提示框)
通过转码,我分别打印了”坑爹啊“和”{此消息通过tuing发送。}“两个字符串的utf=8格式和gbk格式,可以明显看到,windows命令提示符下的默认编码是gbk的,而代码中可以看到中文编码格式为utf-8。
关于python中更多的转码知识推荐看一下这篇文章:http://blog.csdn.net/kiki113/article/details/4062063
既然知道了原因所在那解决起来也就方便很多了,可以知道的是人人的中文编码格式也是utf-8的,所以我们要做的就是将命令提示框中输入的中文转码:
改成
然后再次运行,就可以成功了!
状态成功发表。。。
折腾一晚上了,对微软已经是各种抓狂砸键盘扔鼠标敲屏幕(心中默念草泥马无数遍,顺便提一句,人人的日志编辑也真心就是一坨啊!),再加上前几天在coolshell.cn上看到这篇文章:《程序员技术练级攻略》,觉得将来想搞计算机的都可以看看,如何成为一个优秀的程序员(以及吐槽微软)。
最后,很喜欢coolshell.cn上的那句话:享受编程和技术所带来的快乐。
晚安。。。
注:如果有同学对如何运行python程序不甚了解的,可以参考这里,讲的很详细。