|
|
|
|
移动端

2.4.2 使用IPython交互式编程(3)

《Python Linux系统管理与自动化运维》第2章Python生态工具,在本章中,我们将依次介绍Python生态的各种工具,包括:Python内置的小工具(2.1节);包管理工具pip(2.2节);Linux和Windows下的Python编辑器(2.3节);Python交互式编程工具(2.4节);Python调试器(2.5节);Python代码规范检查工具(2.6节)。本节为大家介绍使用IPython交互式编程。

作者:赖明星来源:机械工业出版社|2017-09-28 16:18

2.4.2 使用IPython交互式编程(3)

IPython的官方文档将magic函数分为三类,分别是:

1)操作代码的magic函数,如%run、%edit、%save、%macro、%recall;

2)控制IPython的magic函数,如%colors、%xmode、%autoindent、%automagic;

3)其他magic函数,如%reset、%timeit、%%writefile、%load、%paste。

为了演示magic函数的使用,我们来看一个实际的例子。假设你是一名DBA,并且非常喜欢Python这门编程语言,会经常使用Python管理MySQL。因此,你经常需要使用Python连接MySQL执行SQL语句(Python连接MySQL的知识将在11章介绍)。使用Python执行SQL语句,对于普通的查询语句,返回的结果将是一个二维的元组。但是,如果执行的是一些管理类的SQL语句或者监控类的SQL语句,Python驱动将会以怎样的方式返回MySQL的查询结果呢?

例如,需要执行下面的SQL语句,并获取返回结果:

show slave status;

show master status;

show variables like '%innodb%buffer%';

show status like '%select%';

set global innodb_buffer_pool_dump_pct = 30;

GRANT ALL PRIVILEGES ON . TO 'lmx'@'localhost' WITH GRANT OPTION。

为了得到Python执行上面SQL语句的结果,需要在Python中连接MySQL并进行认证。认证完成以后执行SQL语句获取输出。由于你经常需要验证SQL语句,因此,使用Python连接MySQL并认证这些代码需要反复输入。为了节省输入时间,我们可以将Python连接MySQL并认证的逻辑保存到外部文件中,在需要的时候通过%load这个magic函数将外部代码导入到IPython中执行即可。例如,我们在一个名为connect.py的外部文件中保存了连接MySQL的代码,在Ipython中使用%load导入外部Python文件:

  1. In [3]: %load connect.py  
  2.  
  3. In [4]: import MySQLdb as db  
  4. conn = db.connect(host="localhost"db="test"user='lmx'passwd='my_passwd'unix_socket='/tmp/mysql.sock')  
  5. cur = conn.cursor()  
  6. sql = "select 1" 
  7. cur.execute(sql)  
  8. rows =  cur.fetchall()  
  9. print rows  
  10. ((1L,),) 

使用%load命令导入外部的Python文件并执行以后,可以继续使用已经建立的MySQL连接执行SQL语句。这个例子主要用以演示magic函数的用法,IPython提供了大量的magic函数,每一个magic函数的具体用法都可以通过问号表达式获取相应的帮助文档。

4.保存历史

保存编码历史这方面,IPython相比标准的Python Shell有了质的提升。用户可以非常灵活地操作IPython的输入历史和输出历史。下面我们简单看几个例子:

_i, _ii, _iii 分别保存了最近的三次输入;

_, __, ___ 分别保存了最近的三次输出;

可以像Bash一样,通过ctrl+p, ctrl+n查找输入;

可以像Bash一样,使用ctrl+r进行反向查找;

IPython的输入历史在当前会话退出以后会进行持久化,下一次进入IPython时,依然可以查找前一次会话的输入历史;

%edit IPython可以通过%edit编辑历史输入并重新执行;

%save IPython可以通过%save将IPython中的代码保存到程序文件中;

%rerun IPython可以指定代码行数重新运行;

  1. In [31]: %rerun 22-23 
  2. === Executing: ===  
  3. data  
  4. json.dumps(data)  
  5. === Output: ===  
  6. Out[31]: '{"a": 1, "b": 2}' 

%macro IPython可以将重新运行的代码定义为宏,这样可以反复重新运行。

5.与操作系统交互

IPython比标准的Python Shell好用的另一个理由是,它能够更好地与操作系统进行交互。在使用Python进行交互式编程时,不用退出Python Shell就可以执行Linux命令。magic函数里的%cd和%pwd作用相当于Linux下的cd命令和pwd命令。此外,在IPython中,可以通过“!cmd”的形式执行任何Linux命令。如下所示:

  1. In [1]: %ls  
  2.  
  3. intro_python_tools.md  resources/  
  4.  
  5. In [2]: %pwd  
  6. Out[2]: '/home/lmx/temp'  
  7.  
  8. In [3]: ! wc -l /tmp/app.log  
  9. 7 /tmp/app.log 

也可以通过赋值的方式捕获命令的输出:

  1. In [4]: data = !df  
  2.  
  3. In [5]: data  
  4. Out[5]:  
  5. ['Filesystem     1K-blocks     Used Available Use% Mounted on',  
  6.  'rootfs          20641336  6731156  12861956  35% /',  
  7.  'udev               10240        0     10240   0% /dev',  
  8.  'tmpfs            3301920      248   3301672   1% /run',  
  9.  '/dev/vda1       20641336  6731156  12861956  35% /',  
  10.  'tmpfs               5120        0      5120   0% /run/lock',  
  11.  'tmpfs            6603820        0   6603820   0% /run/shm' ]  
  12.  
  13. In [6]: data[1].split()[4]  
  14. Out[6]: '35%' 

在Python生态中,除了IPython这个增强的Python Shell以外,还有bython和ptpython这两个不错的Python Shell。后面这两个工具都有自己的特色,但是都没有IPython使用广泛。而且,由于IPython使用最为广泛,很多开源项目(如流行的爬虫框架Scrapy)对IPython进行了集成,所以,建议读者学习IPython。

喜欢的朋友可以添加我们的微信账号:

51CTO读书频道二维码


51CTO读书频道活动讨论群:365934973

【责任编辑:book TEL:(010)68476606】

回书目   上一节   下一节
点赞 0
分享:
大家都在看
猜你喜欢

读 书 +更多

戴尔“血汗工厂”调查报告

去年11月至今年8月间,香港学生组织大学师生监察无良企业行动(以下简称SACOM)通过调查发现,戴尔公司位于东莞的三家代工厂严重违反了《劳...

订阅51CTO邮刊

点击这里查看样刊

订阅51CTO邮刊