您的位置:首页 > 编程语言 > Python开发

ipython 正确的打开方式

2015-11-12 22:02 791 查看
python 的优点之一是交互式解释器;事实上,Ipython集成交互式python的诸多优点。ipython具有卓越的python shell,其性能远远优于标准python 的shell!!!
之前我只知道ipython可以tab 补全、查module的用法、dir、help、使用了这么久,现在终于知道了点皮毛,下面介绍如何使用ipython提高*nix-shell以及python相关任务的执行效率【开始扒皮了】

一、基础使用
1、魔力函数(built-in)[以前我并不知道这是什么东西,也就是ipython的内置的一些方法]
IPython 会将任何第一个字母为%的行,视为对魔力函数的特殊调用。这样你就可以控制ipython,为其增加许多系统级的特征。魔力函数都是以%为前缀,并且参数中不包含括号或者引号。
查看可用的magic

In [46]: %lsmagic
Out[46]:
Available line magics:
%alias  %alias_magic  %autocall  %autoindent  %automagic  %bookmark  %cat  %cd  %clear  %colors  %config  %cp  %cpaste  %debug  %dhist  %dirs  %doctest_mode  %ed  %edit  %env  %gui  %hist  %history  %install_default_config  %install_ext  %install_profiles  %killbgscripts  %ldir  %less  %lf  %lk  %ll  %load  %load_ext  %loadpy  %logoff  %logon  %logstart  %logstate  %logstop  %ls  %lsmagic  %lx  %macro  %magic  %man  %matplotlib  %mkdir  %more  %mv  %notebook  %page  %paste  %pastebin  %pdb  %pdef  %pdoc  %pfile  %pinfo  %pinfo2  %popd  %pprint  %precision  %profile  %prun  %psearch  %psource  %pushd  %pwd  %pycat  %pylab  %quickref  %recall  %rehashx  %reload_ext  %rep  %rerun  %reset  %reset_selective  %rm  %rmdir  %run  %save  %sc  %set_env  %store  %sx  %system  %tb  %time  %timeit  %unalias  %unload_ext  %who  %who_ls  %whos  %xdel  %xmode

Available cell magics:
%%!  %%HTML  %%SVG  %%bash  %%capture  %%debug  %%file  %%html  %%javascript  %%latex  %%perl  %%prun  %%pypy  %%python  %%python2  %%python3  %%ruby  %%script  %%sh  %%svg  %%sx  %%system  %%time  %%timeit  %%writefile

Automagic is ON, % prefix IS NOT needed for line magics.
魔力【魔术】函数 ,它们分为两类%%与%,比如%time,%%time,%表示专门针对一行的命令,%%表示针对多行的命令
值的一说的是:%quickref 它就是ipython中魔术函数的手册,它己经为你总结出每一个 magic func 的用法
2、?与??
?:修饰魔术方法获取更详细的信息。但是不只是这样,?其实是可以修饰python所有的对象。考虑到python中一切都是对象,所以你懂的
??:可以用于查看变量,类、包、类中方法、内置函数的源码。
3、 !xxx
ipython提供了一个额外的!语法去直接执行linux命令;

使用$可以将变量传递到shell命令中;
!!可以替换!,除了使用!!无法保存结果到变量之外,两者完全相同.
In [50]: user='sysadmin'

In [51]: process='bash'

In [52]: l=!ps aux |grep $user |grep $process

In [53]: l
Out[53]:
['root     18119  0.0  0.0 106096  1144 pts/8    S+   14:00   0:00 /bin/sh -c ps aux |grep sysadmin |grep bash',
'sysadmin 24270  0.0  0.0 108340  1848 pts/0    Ss   09:36   0:00 -bash',
'sysadmin 27048  0.0  0.0 108476  1860 pts/7    Ss   10:06   0:00 -bash']
4、%run
有了它之后,就可以不用退出ipython而运行*.py;
常用的选项:
-t:打印出cpu timings
-N#:表示重复次数
-p:这个选项会开启python profiler,从而打印出详细的执行时间、函数调用等等信息供优化参考。
-d:会进入单步调试模式(ipdb),可以看到程序内部执行流程
In [108]: %run -tp temp.py
Space used in /tmp directory
8.0K	/tmp/ipython_edit_MrCrjh
4.0K	/tmp/.ICE-unix
8.0K	/tmp/ipython_edit_k8BYnO
...
82 function calls in 0.027 seconds

Ordered by: internal time

ncalls  tottime  percall  cumtime  percall filename:lineno(function)
1    0.010    0.010    0.010    0.010 {posix.fork}
1    0.007    0.007    0.007    0.007 {posix.read}
1    0.005    0.005    0.005    0.005 {posix.waitpid}
1    0.001    0.001    0.019    0.019 subprocess.py:1111(_execute_child)
1    0.001    0.001    0.026    0.026 {execfile}
1    0.000    0.000    0.027    0.027 interactiveshell.py:2616(safe_execfile)
4    0.000    0.000    0.000    0.000 {fcntl.fcntl}
1    0.000    0.000    0.025    0.025 subprocess.py:485(call)
5、alias
能够衔接python与UNIX shell功能的第一个特征就是alias魔术函数
In [24]: alias nss netstat -talp

In [25]: nss |grep http
tcp        0      0 *:http                      *:*                         LISTEN      22902/nginx
当然了,这都是常用的功能,还有另一种功能“格式化替换”
In [42]: alias nss netstat %l |grep :6011

In [43]: nss -talp
tcp        0      0 localhost:6011              *:*                         LISTEN      27047/sshd
tcp        0      0 localhost:6011              *:*                         LISTEN      27047/sshd
这是的%l(字母l)该方法用于将行的其它部分插入到alias中,还可以通过命令字任串插入不同的参数,用%s表示字符串
In [44]: alias aecho echo firt "#%s#",second "#%s#"

In [45]:

In [45]: aecho JACK pam
firt #JACK#,second #pam#
如果输入的参数少于需要的参数则会报错,但多余需要的参数则不会【23333..】
6、 %store
可以使用他保留所使用的别名,下次打开ipython就可以直接使用了
In [46]: %store nss
Alias stored: nss (netstat %l |grep :6011)
注:这需要SQLite的支持,否则打开新的会话将无法使用别名

二、进阶用法
1、字符串处理
ipython 另一个强大的功能是采用字符串方式处理系统 shell命令执行结果
In [8]: ps =!ps -aux

In [9]: ps.
ps.append     ps.fields     ps.get_paths  ps.index      ps.list       ps.p          ps.remove     ps.sort
ps.count      ps.get_list   ps.get_spstr  ps.insert     ps.n          ps.paths      ps.reverse    ps.spstr
ps.extend     ps.get_nlstr  ps.grep       ps.l          ps.nlstr      ps.pop        ps.s

In [9]: ps.grep('ssh')
Out[9]:
['root      6854  0.0  0.0  66140   240 ?        Ss   Oct09   0:00 /usr/sbin/sshd',
'root     21334  0.0  0.0 100348     8 ?        Ss   14:49   0:00 sshd: sysadmin [priv]',
'sysadmin 21336  0.0  0.0 100496   356 ?        S    14:49   0:01 sshd: sysadmin@pts/3',
'root     29347  0.0  0.2 100352  4304 ?        Ss   16:49   0:00 sshd: sysadmin [priv]',
'sysadmin 29351  0.0  0.1 100760  2280 ?        S    16:49   0:00 sshd: sysadmin@pts/0',
'root     30684  0.0  0.2 100352  4280 ?        Ss   17:08   0:00 sshd: sysadmin [priv]',
'sysadmin 30739  0.0  0.0 100352  1884 ?        S    17:08   0:00 sshd: sysadmin@pts/4']
这里面除了有列表的属性还有一些其它附加的属性
In [20]: ps.grep('sshd')
Out[20]:
['root      1033  0.0  0.0  66144  1180 ?        Ss   18:13   0:00 /usr/sbin/sshd',
'root      1157  0.0  0.0 100352  4304 ?        Ss   18:13   0:00 sshd: sysadmin [priv]',
'sysadmin  1159  0.0  0.0 100496  2024 ?        S    18:13   0:00 sshd: sysadmin@pts/0',
'root      1348  0.0  0.0 100352  4312 ?        Ss   18:16   0:00 sshd: sysadmin [priv]',
'sysadmin  1350  0.0  0.0 100352  1888 ?        S    18:16   0:00 sshd: sysadmin@pts/1']

In [21]: ps.grep('sshd').fields(0,1,8)
Out[21]:
['root 1033 18:13',
'root 1157 18:13',
'sysadmin 1159 18:13',
'root 1348 18:16',
'sysadmin 1350 18:16']
还可以这样

ps.grep('ssh').fields(1).s
Out[29]: '1033 1157 1159 1348 1350'
2、信息收集
a、pdef、pdoc、pfile、pinfo、psoure、psearch函数
pdef:打印出可调用的对象的定义名或是函数声明
In [40]: def tmp_space():
....:         '''return somting directory used info'''
....:         tmp_usage = 'du'
....:         tmp_arg = '-h'
....:         path = '/tmp'
....:         print "Space used in /tmp directory"
....:         subprocess.call([tmp_usage,tmp_arg,path])
....:

In [41]: pdef tmp_space
tmp_space()
pdoc:输出注释信息与使用示例
In [42]: pdoc tmp_space
Class docstring:
return somting directory used info
Call docstring:
x.__call__(...) <==> x(...)

In [43]:
pfile:了解代码如何运行的 【module??】的功能是一样的
In [46]: import commands

In [47]: pfile commands

In [48]: commands??
pinfo:获取类型、类、命令空间和注释等信息
In [1]: import commands

In [2]: pinfo
%pinfo   %pinfo2

In [2]: pinfo commands

In [3]: pinfo commands

Type:        module
String form: <module 'commands' from '/usr/local/python27/lib/python2.7/commands.pyc'>
File:        /usr/local/python27/lib/python2.7/commands.py
Docstring:
Execute shell commands via os.popen() and return status, output.

Interface summary:

import commands

outtext = commands.getoutput(cmd)
(exitstatus, outtext) = commands.getstatusoutput(cmd)
outtext = commands.getstatus(file)  # returns output of "ls -ld file"

A trailing newline is removed from the output string.

Encapsulates the basic operation:

pipe = os.popen('{ ' + cmd + '; } 2>&1', 'r')
text = pipe.read()
sts = pipe.close()

[Note:  it would be nice to add functions to interpret the exit status.]
(END)
psource:通过运行page显示源代码
In [1]: %cd /tmp
/tmp

In [2]: import temp

In [3]: psource temp

In [4]: psource temp

#!/usr/bin/env python

import subprocess

def tmp_space():
'''return somting directory used info'''
tmp_usage = 'du'
tmp_arg = '-h'
path = '/tmp'
print "Space used in /tmp directory"
:
In [5]: psource temp.
temp.main        temp.py          temp.pyc         temp.subprocess  temp.tmp_space

In [5]: psource temp.tmp_space
def tmp_space():
'''return somting directory used info'''
tmp_usage = 'du'
tmp_arg = '-h'
path = '/tmp'
print "Space used in /tmp directory"
subprocess.call([tmp_usage,tmp_arg,path])
psearch: 根据名称查找python对象
In [6]: psearch a*
abs
all
any
apply
In [9]: import os

In [10]: os.li*? #psearch os.li*
os.linesep
os.link
os.listdir
常用的选项有:
-s: 指定范围【范围空间有builtin,user,user_global,internal和alias】
-e:排除搜索范围
In [17]: %psearch -e builtin a*

In [18]: a='abc'

In [19]: %psearch -e builtin a*
a

In [24]: psearch -e builtin * int

In [25]: psearch -e builtin * string
__
___
__doc__
__name__
a

In [26]: __
Out[26]: ''

In [27]: ___
Out[27]: ''

In [28]: __doc__
Out[28]: 'Automatically created module for IPython interactive environment'

In [29]: a
Out[29]: 'abc'
b、who函数:列出所有交互定义的对象
In [30]: who
a	 os	 temp

In [31]: !who
sysadmin pts/3        2015-11-12 20:26 (219.235.192.74)
sysadmin pts/4        2015-11-12 20:26 (219.235.192.74)
In [32]: who str
a
In [35]: who module
os	 temp
In [36]: whos
Variable   Type      Data/Info
------------------------------
a          str       abc
os         module    <module 'os' from '/usr/l<...>27/lib/python2.7/os.pyc'>
temp       module    <module 'temp' from 'temp.py'>

In [37]: who_ls
Out[37]: ['a', 'os', 'temp']
c、rep 函数:
它是一个自动启用函数,rep 函数有一些你或觉得有用的参数[对于我来说];不使用还参数的rep可以取回最近处理的结果,并在一行输出时设置一个字符串表示
In [92]: a=!which ls

In [93]: a[0]
Out[93]: '/bin/ls'

In [94]: rep

In [95]: /bin/ls

In [95]: x=!/bin/ls

In [96]: x
Out[96]:
['151111.sql',
'151111.tar.gz',
'22_40.SQL',
'agent2610.log',
'crm.log',
'ip.log',
'ipython_edit_k8BYnO',
'ipython_edit_MrCrjh',
'ipython_edit_RLhXgZ',
'ipython_edit_z87hKG',
'pdb-bin.460',
'pic',
'temp.py',
'temp.pyc',
'user.log']

In [97]:
下次更新写一下ipython notebook 这个可是一个神器啊【



三、总结

ipython这完全是一个神奇的shell,集文本编辑器、交互会话于一体的工具包,优其是在字符串处理方面,以后的日常工作就可以用ipython当/bin/bash了,对于菜鸟【主要是我】来说可以更好学习python。

本文出自 “和风细雨” 博客,请务必保留此出处http://essun.blog.51cto.com/721033/1712322
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: