一个命令行 Python 工具 -- Pythonpy

Pythonpy 是一个可以在命令行直接执行简单 Python 表达式的工具。

安装:

pip install pythonpy

使用:

$ py --help
usage: py [-x] [-l] [-c PRE_CMD] [-C POST_CMD] [-V] [-h] [expression]

positional arguments:
  expression     e.g. py '2 ** 32'

Options:
  -x             treat each row of stdin as x
  -l             treat list of stdin as l
  -c PRE_CMD     run code before expression
  -C POST_CMD    run code after expression
  -V, --version  version info
  -h, --help     show this help message and exit

我的算术能力很差,每次拿到一个文件大小,都是这样来换算单位的:

$ python -c "print 248168/1024.0"
242.3515625

有了 pythonpy 这个工具,就简单得多:

$ py "248168/1024.0"
242.3515625

要查看一个库的版本,以前是这样的:

$ python -c "import pandas; print pandas.__version__"
0.16.2

现在是这样的:

$ py "pandas.__version__"
0.16.2

是不是感觉瞬间少打了好多字。该工具还有一些其他的用法。

自动导入模块

从上边的例子可以看出,Pythonpy 会自动将用到的模块导入:

$ py 'math.exp(1)'
2.71828182846

$ py "random.random() * 10"
9.817973619078444

$ py "datetime.datetime.now()"
2017-03-03 10:15:49.816115

$ py "pandas.DataFrame?"
class DataFrame(pandas.core.generic.NDFrame)
 |  Two-dimensional size-mutable, potentially heterogeneous tabular data
 |  structure with labeled axes (rows and columns). Arithmetic operations
 |  align on both row and column labels. Can be thought of as a dict-like
 |  container for Series objects. The primary pandas data structure
 ...

将表达式引用于每行的输入 (py -x)

-x 参数,Pythonpy 会将每一行的输入作为变量 x 在表达式中应用。

每一行乘以 3:

$ py "range(3)"
0
1
2

$ py "range(3)" | py -x "int(x) * 3"
0
3
6

抓取一个csv文件的第二列

$ echo $'a1,b1,c1\na2,b2,c2' | py -x 'x.split(",")[1]'
b1
b2

将所有输入行转化为列表 (py -l)

-l 参数,相当于 l = list(sys.stdin) :

$ py "range(3)"
0
1
2

$ py "range(3)" | py -l "type(l)"
<class 'list'>

翻转输入:

$ py 'range(3)' | py -l 'l[::-1]'
2
1
0

求和:

$ py 'range(3)' | py -l 'sum(int(x) for x in l)'
3

统计输入行:

$ py 'range(17)' | py -l 'len(l)'
17

统计某字母开头单词的个数:

$ cat /usr/share/dict/words | py -x 'x[0].lower()' | py -l 'collections.Counter(l).most_common(5)'
('s', 25162)
('p', 24461)
('c', 19901)
('a', 17096)
('u', 16387)

-c 与 -C 区别

这两个参数单独用时,与 python -c 是没有任何区别的。但如果同时用时,则带来了新的特性。-c 表示在表达式之前运行,-C 表示在表达式之后运行。这个描述不太直观,先来看一个应用:

py -c "import pandas as pd; print(pd.__version__)"
0.19.2

也就是我们要对库使用 as 时(毕竟有些库的名字可能太长),Pythonpy 不能直接完成该操作。这是,我们可以用 -c 先执行 import ... as ... 操作,然后再执行一系列后续的操作:

$ py -c "import pandas as pd" -C "print(pd.__version__)"
0.19.2

如果还困惑,这样是不是好些呢:

$ py -C "print(pd.__version__)" -c "import pandas as pd"
0.19.2

所以,-c 指定的表达式会在 -C 指定的表达式之前运行。

总结

如果你习惯使用 Python,或者喜欢用 Python 编写脚本来处理日常工作,那 Pythonpy 是一个不错的选择。至少你不用再打开一个解释器,执行完几条语句后又退出,也不用输入 python -c。使用 Pythonpy 可以充分发挥你的才华和想象力来高效的完成很多工作,例如作者给出的一些示例:Pythonpy-More-Examples.

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,635评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,628评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,971评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,986评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 68,006评论 6 394
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,784评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,475评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,364评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,860评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,008评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,152评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,829评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,490评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,035评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,156评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,428评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,127评论 2 356

推荐阅读更多精彩内容