ipython 正确的打开方式

简介:

  python 的优点之一是交互式解释器;事实上,Ipython集成交互式python的诸多优点。ipython具有卓越的python shell,其性能远远优于标准python 的shell!!!

  之前我只知道ipython可以tab 补全、查module的用法、dir、help、使用了这么久,现在终于知道了点皮毛,下面介绍如何使用ipython提高*nix-shell以及python相关任务的执行效率【开始扒皮了】


一、基础使用

 1、魔力函数(built-in)[以前我并不知道这是什么东西,也就是ipython的内置的一些方法]

   IPython 会将任何第一个字母为%的行,视为对魔力函数的特殊调用。这样你就可以控制ipython,为其增加许多系统级的特征。魔力函数都是以%为前缀,并且参数中不包含括号或者引号。

1
2
3
4
5
6
7
8
9
10
11
查看可用的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命令中;

!!可以替换!,除了使用!!无法保存结果到变量之外,两者完全相同.

1
2
3
4
5
6
7
8
9
10
11
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),可以看到程序内部执行流程 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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魔术函数

1
2
3
4
In [24]:  alias  nss  netstat  -talp
  
In [25]: nss | grep  http
tcp        0      0 *:http                      *:*                         LISTEN      22902 /nginx

   当然了,这都是常用的功能,还有另一种功能“格式化替换”

1
2
3
4
5
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表示字符串

1
2
3
4
5
6
In [44]:  alias  aecho  echo  firt  "#%s#" ,second  "#%s#"
  
In [45]: 
  
In [45]: aecho JACK pam
firt  #JACK#,second #pam#

  如果输入的参数少于需要的参数则会报错,但多余需要的参数则不会【23333..】

 6、 %store

   可以使用他保留所使用的别名,下次打开ipython就可以直接使用了

1
2
In [46]: %store nss
Alias stored: nss ( netstat  %l | grep  :6011)

    注:这需要SQLite的支持,否则打开新的会话将无法使用别名 

二、进阶用法

   1、字符串处理

      ipython 另一个强大的功能是采用字符串方式处理系统 shell命令执行结果

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
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' ]

 这里面除了有列表的属性还有一些其它附加的属性

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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' ]

  还可以这样

1
2
ps . grep ( 'ssh' ).fields(1).s
Out[29]:  '1033 1157 1159 1348 1350'

 2、信息收集

  a、pdef、pdoc、pfile、pinfo、psoure、psearch函数

    pdef:打印出可调用的对象的定义名或是函数声明

1
2
3
4
5
6
7
8
9
10
11
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:输出注释信息与使用示例

1
2
3
4
5
6
7
In [42]: pdoc tmp_space
Class docstring:
     return  somting directory used info
Call docstring:
     x.__call__(...) <==> x(...)
  
In [43]:

   pfile:了解代码如何运行的 【module??】的功能是一样的

1
2
3
4
5
In [46]:  import  commands
  
In [47]: pfile commands
  
In [48]: commands??

  pinfo:获取类型、类、命令空间和注释等信息

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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显示源代码

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
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对象

1
2
3
4
5
6
7
8
9
10
11
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:排除搜索范围

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
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函数:列出所有交互定义的对象

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
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可以取回最近处理的结果,并在一行输出时设置一个字符串表示

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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 这个可是一个神器啊【j_0028.gif

三、总结

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











本文转自 jinlinger 51CTO博客,原文链接:http://blog.51cto.com/essun/1712322,如需转载请自行联系原作者
目录
相关文章
|
7月前
Jupyter-notebook 常用快捷键
Jupyter-notebook 常用快捷键
126 0
|
4天前
|
开发工具 Python
[oeasy]python0010_怎么用命令行保存文件
[oeasy]python0010_怎么用命令行保存文件
19 1
【Jupyter】JupyterNotebook快捷键及使用方式
【Jupyter】JupyterNotebook快捷键及使用方式
|
12月前
|
Linux iOS开发 MacOS
一日一技:你不知道的PyCharm命令行用法
一日一技:你不知道的PyCharm命令行用法
199 0
|
Python
pycharm常用快捷键
pycharm常用快捷键
1049 0
pycharm常用快捷键
|
Python
PyCharm常用快捷键
PyCharm常用快捷键
233 0
PyCharm常用快捷键
Jupyter Notebook 的快捷键
Jupyter Notebook 的快捷键 Jupyter Notebook 有两种键盘输入模式。编辑模式,允许你往单元中键入代码或文本;这时的单元框线是绿色的。命令模式,键盘输入运行程序命令;这时的单元框线是灰色。
308 0
|
Python
Pycharm常用快捷键【快查字典版】(上)
Pycharm常用快捷键【快查字典版】(上)
333 0
Pycharm常用快捷键【快查字典版】(上)
|
Python
Pycharm常用快捷键【快查字典版】(下)
Pycharm常用快捷键【快查字典版】(下)
136 0
Pycharm常用快捷键【快查字典版】(下)
Jupyter Notebook添加目录
如果用jupyter notebook跑代码时,当分了很多点,想看到对应的目录,对总体有个概览时,会发现notebook木有自动生成目录的栏目。
141 0
Jupyter Notebook添加目录