Python 库 Pexpect



使用 Python3 编码时, 不可避免的会调用到系统命令, 一般会使用

os.open
os.system
subprocess.call
commands

常用的库, 如果涉及到登录到其他系统上操作某指令, 以前会撸一个 shell 脚本, 调用 epxect xx.sh 来执行.

Violent Python 书中发现作者用的是 Pexpect 库, 挺有意思的, 分享一下.

1. 简介

Pexpect 是一个用来启动子程序并对其进行自动控制的 Python 模块, 可以和 ssh、ftp、passwd、telnet 等命令行程序进行自动交互。

安装

pip install pexpect

测试一下:

>>> import pexpect
>>> pexpect.run('ls -a')
b'.\t..\ttest.py\r\n'

2. 使用

pexpect 提供了两个类来调用系统命令 run() 和 spawn(), 推荐使用后者.

2.1 run() 函数

如上面的测试例子, run()函数的输出和 os.system() 命令非常相似, 比较高级的是, pexpect.run() 能获得 sys.out 输出内容以及命令的退出状态

>>> output, status = pexpect.run('ls /', withexitstatus=1)
>>> status
0
>>> output
b'Applications\t\t\tUsers\t\t\t\tdata\t\t\t\tinstaller.failurerequests......\r\n'
>>>
## 不存在的目录
>>> output, status = pexpect.run('ls /DirNotExits', withexitstatus=1)
>>> status
1
>>> output
b'ls: /DirNotExits: No such file or directory\r\n'

阅读全文 »


一张打折卡引发的精度思考



1. 背景

在验证网商营销平台时, 发现一个奇怪的打折卡

Screen_Shot_2016-08-10_at_21.46.55

经排查, 服务端返回的是打折卡额度分别是 0.39, 0.49, 前端数值乘以 10 进行展示, 0.39 * 10 = 3.9000000000000004, 在浏览器演示如下:

Screen_Shot_2016-08-10_at_21.51.00

很明显是 Javascript 浮点运算精度问题, 那么为什么两个运算结果一个正常, 一个这么不正经呢?

阅读全文 »


Vim 一键配置



配置Vim

wget https://os.alipayobjects.com/rmsportal/gEYbNstsudEJKZn.js  -O vim.sh && sh vim.sh && rm vim.sh

阅读全文 »


Amazing Pi



阅读全文 »


Python 性能分析工具 cProfile



一般看看 py 脚本的性能, 可以使用古老的 linux 工具 time, 或者自己在代码中写上 time.clock().

➜  codewars  time python3 xingneng.py
python3 xingneng.py  4.64s user 0.02s system 99% cpu 4.698 total

这样粒度比较粗超, 进一步的分析可以借助标准库中的三个分析模块: cProfile profile hotshot.

python3中, hotshot已经被废弃了, 如果没有特殊需求, 建议使用 cProfile. 本文简单介绍下使用 gprof2dotcProfile 分析 python 脚本性能.

阅读全文 »