阿小信大人的头像
Talk is cheap. Show me the code. Linus Torvalds

分享几个实用的python命令行工具2015-05-29 14:23

1. pyenv

pyenv是一个使用简单的python版本管理工具,可以让你简单的切换python版本。python2.x在5年后将不在更新维护,所以是时候熟悉python3了! 那么如何方便的即用python2又可以在方便的切换到python3呢?上pyenv。当然,还有一个叫做p的工具也可以,不过比较之下我更喜欢pyenv,pyenv更强大些,但是p切换版本很方便。

安装:

$ curl -L https://raw.githubusercontent.com/yyuu/pyenv-installer/master/bin/pyenv-installer | bash

或者

brew install pyenv

在你的shellrc文件中添加:

export PATH="$HOME/.pyenv/bin:$PATH"
eval "$(pyenv init -)"
eval "$(pyenv virtualenv-init -)"

查看所有可用的命令:

pyenv commands

查看可以安装的python版本:

pyenv install --list

查看当前可用的Python版本:

pyenv versions

安装和卸载其他版本的python:

pyenv install 3.4.0
pyenv rehash

pyenv uninstall 3.4.0

切换python版本,默认版本为system:

pyenv local 3.4.0   # 在当前目录改变python版本
pyenv local --unset # 取消改变
pyenv global 3.4.0  # 全局改变python版本
pyenv shell 3.4.0   # 改变当前shellpython版本

安装新版本的python或者其他二进制包后都需要运行:

pyenv rehash

否则不会生效

eg:在pyenv中使用virtualenv部署werkzueg的测试app:

# 将virtualenv安装在pypy中
pyenv local pypy-2.3.1
pyenv virtualenv venv_pypy
pyenv local venv_pypy
which python
pip install -Ur requirements.txt
pip install -U Gunicorn
pyenv rehash
which gunicorn
gunicorn -b :5000 -w 9 werkzeug.testapp:test_app

2. unp

unp是一个草鸡好用的解压工具,支持格式:

- ar    AR Archives (*.a)
- bz2   Bz2 Compressed Files (*.bz2)
- tbz2  Bz2 Compressed Tarballs (*.tar.bz2)
- gz    Gzip Compressed Files (*.gz)
- tgz   Gzip Compressed Tarballs (*.tar.gz; *.tgz)
- tar   Uncompressed Tarballs (*.tar)
- cab   Windows Cabinet Archive (*.cab)
- xz    XZ Compressed Files (*.xz)
- txz   XZ Compressed Tarballs (*.tar.xz)
- zip   Zip Archives (*.zip; *.egg; *.whl; *.jar)

在linux下解压文件只需

unp FILENAME

就能解压,无需再给一堆麻烦的参数。

安装unp:

sudo pip install unp

3. cheat

好的,很多命令的参数你都记不住,你会man一下是吧,但是是不是看起来效率很低,不具可读性呢?如果你这么觉得,那么cheat就是你需要的。

安装:

brew install cheat

或者

sudo pip install cheat

eg:

> cheat find
# To find files by case-insensitive extension (ex: .jpg, .JPG, .jpG):
find . -iname "*.jpg"

# To find directories:
find . -type d

# To find files:
find . -type f

# To find files by octal permission:
find . -type f -perm 777

# To find files with setuid bit set:
find . -xdev \( -perm -4000 \) -type f -print0 | xargs -0 ls -l

# To find files with extension '.txt' and remove them:
find ./path/ -name '*.txt' -exec rm '{}' \;

# To find files with extension '.txt' and look for a string into them:
find ./path/ -name '*.txt' | xargs grep 'string'

# To find files with size bigger than 5 Mb and sort them by size:
find . -size +5M -type f -print0 | xargs -0 ls -Ssh | sort -z

# To find files bigger thank 2 MB and list them:
find . -type f -size +20000k -exec ls -lh {} \; | awk '{ print $9 ": " $5 }'

# To find files modified more than 7 days ago and list file information
find . -type f -mtime +7d -ls

# To find symlinks owned by a user and list file information
find . -type l --user=username -ls

# To search for and delete empty directories
find . -type d -empty -exec rmdir {} \;

# To search for directories named build at a max depth of 2 directories
find . -maxdepth 2 -name build -type d

# To search all files who are not in .git directory
find . ! -iwholename '*.git*' -type f

# Find all files that have the same node (hard link) as MY_FILE_HERE
find . -type f -samefile MY_FILE_HERE 2>/dev/null

4. pipreqs

有没有觉得有时候pip freeze > requirements.txt里面有些乱七八糟的模块,可能是手贱安装的,也可能是安装了后来没有用到的,模块多了很难发现,那么要保持一个干净的requirements也可以很easy哦。

pipreqs是一个根据你的项目的import来生成requirements.txt的工具。

安装:

pip install pipreqs

用法:

$ pipreqs /home/project/location
Successfully saved requirements file in /home/project/location/requirements.txt

5. ptpython

如果你喜欢ipython,那你一定会爱上ptpython。ptpython是一个比ipython更加高级的Python REPL。

安装:

pip install ptpython

特性:

  • 可以选用vi或emacs模式 (默认emacs,ptpython --vi使用vi模式)
  • 语法高亮,语法检查
  • 自动补全 (tab/shift-tab,如果是vi模式可以C-n/C-p)
  • 多行编辑 (冒号后的代码会变成多行编辑,不会像ipython一样不好编辑)

安装:

pip install ptpython

如果你安装了ipython,输入一把ptipython让你飞起来。

6. thefuck

thefuck是一个改正你上一条错误命令的工具,当你输入了一个错误拼写的命令,这时直接输入fuck就可以运行你本来需要执行的正确命令。

eg:

我新建了一个分支,要push他,但是发现尼玛远程还没有,这么长的正确命令我懒得复制,但是我可以fuck。

> git push
fatal: The current branch test has no upstream branch.
To push the current branch and set the remote as upstream, use

    git push --set-upstream origin test
> fuck
git push --set-upstream origin test
Total 0 (delta 0), reused 0 (delta 0)
To git@github.com:axiaoxin/tests.git
* [new branch]      test -> test
Branch test set up to track remote branch test from origin.

安装:

pip install thefuck

然后在你的.bashrc中添加

alias fuck='eval $(thefuck $(fc -ln -1)); history -r'
# You can use whatever you want as an alias, like for Mondays:
alias FUCK='fuck'

zsh粉在.zshrc中添加

alias fuck='eval $(thefuck $(fc -ln -1 | tail -n 1)); fc -R'

7. SimpleTornadoServer

python -m SimpleHTTPServer传文件很酸爽吧,但是SimpleHTTPServer 不支持「续传」,和 wget 组合在糟糕的网络下传递一个稍大的文件总是会中途出错又重头再来,再来再错永远也下载不完。 那么,试试python -m SimpleTornadoServer吧,从此生活变得更加美好,你会有更多时间陪伴你的女朋友。

安装:

pip install SimpleTornadoServer

8. pythonpy

好的,上面的server工具表示在命令行可以直接执行某个python模块,还比如json.tool什么的,那么,我要直接执行python代码可以吗?我记不住shell语法我要直接用python好吗?好的,pythonpy带你飞。

安装:

pip install pythonpy

用法:

$ py '3 * 1.5'
4.5

$ py 'math.exp(1)'
2.71828182846

$ py 'random.random()'
0.103173957713

$ py 'range(3)'
0
1
2

$ py '[range(3)]'
[0, 1, 2]

$ py 'range(3)' | py -x 'int(x)*7'
0
7
14

$ py 'range(3)' | py -x 'x + ".txt"'
0.txt
1.txt
2.txt

$ py 'range(8)' | py -x 'x if int(x)%2 == 0 else None'
0
2
4
6

$ 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', 11327)
('c', 9521)
('p', 7659)
('b', 6068)
('m', 5922)

$ py 'datetime.datetime.now?'
Help on built-in function now:

now(...)
    [tz] -> new datetime with tz's local day and time.

9. json2xls

json2xls是一个根据json生成excel表格的工具

安装:

pip install json2xls

用法:

根据json字符串生成excel

json2xls cmd_str_test.xls '{"a":"a", "b":"b"}'
json2xls cmd_str_test1.xls '[{"a":"a", "b":"b"},{"a":1, "b":2}]'

根据json文件生成excel

json2xls cmd_list_test.xls "`cat list_data.json`"

根据每行一个json的文件生成excel

json2xls cmd_line_test.xls line_data.json

根据返回json的url生成excel

json2xls cmd_get_test.xls http://httpbin.org/get
json2xls cmd_post_test.xls http://httpbin.org/post -m post -d '"hello json2xls"' -h "{'X-Token': 'bolobolomi'}"

顺便推荐一个叫做csvkit的命令行工具,命令行处理csv的大杀器,jq,命令行处理json的大杀器。

其他的还有类似yapf,isort,autopep8之类的也是值得推荐的,我多用于vim中,不在这里写了。

如果您觉得从我的分享中得到了帮助,并且希望我的博客持续发展下去,请点击支付宝捐赠,谢谢!

若非特别声明,文章均为阿小信的个人笔记,转载请注明出处。文章如有侵权内容,请联系我,我会及时删除。

#Python#  
分享到:
阅读[2701] 评论[0]

你可能也感兴趣的文章推荐

本文最近访客

发表评论