2.4.1 IPython的功能介绍
IPython提供了改进的交互式Python Shell,我们可以利用IPython来执行Python语句,并能够立刻看到结果,这一点跟Python自带的Shell工具没有什么不同,但是IPython额外提供的很多实用功能是Python自带的Shell所没有的,正是这些功能,使得IPython成为众多Python用户首选的Shell。
要说明的是,下面的演示是以Mac系统下的IPython为例进行的(Mac下安装IPython较简单,这里略过)。
·系统版本:Darwin 17.7.0
·Python版本:2.7.10
·IPython版本:5.8.0
1.IPython命令的使用方法
Mac系统下启动IPython的命令为:
Python -m IPython
命令显示结果如下:
Python 2.7.10 (default, Oct 6 2017, 22:29:07) Type "copyright", "credits" or "license" for more information. IPython 5.8.0 -- An enhanced Interactive Python. ? -> Introduction and overview of IPython's features. %quickref -> Quick reference. help -> Python's own help system. object? -> Details about 'object', use 'object' for extra details. In [1]:
魔术函数(也可以称为命令)是IPython提供的一整套命令,用这些命令可以操作IPython本身,以及提供一些系统功能。魔术命令包括两种方法:一是行魔术命令(line magics),以%为前缀,在单个输入行上运行;二是单元格魔术命令(cell magics),以%%为前缀,在多个输入行上运行。
IPython提供了很多类似的魔术命令,如果你想看都有哪些魔术命令,可以通过%lsmagic来查询,如果想查询某个命令的详细信息,可以通过%cmd?来获取,例如:%run?。
另外,默认情况下automagic是ON状态,也就是说对于line-oriented命令我们不需要使用前面的%符号,直接输入命令即可(例如:cd/root/python),但是对于cell-oriented命令我们必须输入%%符号。
注意
可以通过%automagic来打开/关闭automagic功能,automagic功能打开的时候,我们输入命令可以带上%符号,也可以不带。
2.IPython功能明细介绍
下面来看看IPython强大而实用的功能。
1)通过run可直接运行程序,比如运行/root/python/tt.py文件的命令如下:
In [31]: run /root/python/tt.py
2)拥有TAB自动补全功能。使用过Linux命令行的读者都应该知道TAB键自动补全有多实用吧!IPython可以针对之前输入过的变量、对象的方法等进行自动补全。我们只需要输入一部分,就可以看到命名空间中所有相匹配的变量、函数等,下面通过图2-1了解相关功能。
图2-1 IPython TAB自动补全图示
TAB键还可以针对文件路径进行补全,比如针对我们输入的路径补全可选路径。
3)内省。在变量的前面或后面加问号(?)就可以查询某对象相关的信息,当对象的描述信息较多时,需要通过两个问号(??)来显示全部信息,这在看文件的源码时特别适用,比如,我们要查看os模块的源码信息,可通过如下命令实现:
In [57]: import os In [58]: os??
结果显示如下:
Type: module String form: <module 'os' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.pyc'> File: /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/os.py Source: r"""OS routines for NT or Posix depending on what system we're on. This exports: - all functions from posix, nt, os2, or ce, e.g. unlink, stat, etc. - os.path is one of the modules posixpath, or ntpath - os.name is 'posix', 'nt', 'os2', 'ce' or 'riscos' - os.curdir is a string representing the current directory ('.' or ':') - os.pardir is a string representing the parent directory ('..' or '::') - os.sep is the (or a most common) pathname separator ('/' or ':' or '\\') - os.extsep is the extension separator ('.' or '/') - os.altsep is the alternate pathname separator (None or '/') - os.pathsep is the component separator used in $PATH etc - os.linesep is the line separator in text files ('\r' or '\n' or '\r\n') - os.defpath is the default search path for executables - os.devnull is the file path of the null device ('/dev/null', etc.) Programs that import and use 'os' stand a better chance of being portable between different platforms. Of course, they must then only use functions that are defined by all platforms (e.g., unlink and opendir), and leave all pathname manipulation to os.path (e.g., split and join). """ #'
如果我们想查看os.path函数的使用说明,可通过如下命令实现:
In [60]: os.path?
结果显示如下:
Type: module String form: <module 'posixpath' from '/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.pyc'> File: /System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.py Docstring: Common operations on Posix pathnames. Instead of importing this module directly, import os and refer to this module as os.path. The "os.path" name is an alias for this module on Posix systems; on other systems (e.g. Mac, Windows), os.path provides the same operations in a manner specific to that platform, and is an alias to another module (e.g. macpath, ntpath). Some of this can actually be useful on non-Posix systems too, e.g. for manipulation of the pathname component of URLs.
4)执行外部系统命令和运行外部文件。在IPython中,可以很容易地执行外部系统命令和运行文件。
使用!符号可执行外部系统命令,比如要用系统命令ls来查看当前目录中所有以py结尾的文件,则可以使用如下命令:
In [70]: !ls *.py
显示结果如下:
test.py
运行外部文件,例如要执行/tmp/test.py文件,可以用以下命令来实现:
!python /tmp/test.py
5)直接编辑代码。我们可以在IPython命令行下输入edit命令,edit命令用于启动一个编辑器。在Linux/Mac系统中会启动vim编辑器,在Windows系统中则会启动notepad编辑器。我们可以在编辑器上编辑代码,保存退出后就会执行相应的代码。
比如我们在vim编辑器中输入了如下内容:
print 'hello,yhc!'
保存以后关掉编辑器,IPython将会立即执行这一段代码,执行结果如下:
IPython will make a temporary file named: /var/folders/qr/8w719nd531j0l4nvdvqlycd80000gn/T/ipython_edit_29b_nF/ipython_edit_XV_OG_.py Editing... done. Executing edited code... hello,yhc! Out[8]: "print 'hello,yhc!'\n"
如果我们只想编辑或修改而不执行代码呢?可以用如下命令实现:
edit -x
6)开启或关闭pdb功能。当我们打开这个功能的时候(通过%pdb on或者%pdb 1),程序一旦遇到Exception就会自动调用pdb,进入pdb交互界面;如果要关闭该功能可以通过%pdb off或者%pdb 0实现。
7)收集对象信息。IPython不仅可以用来管理系统,它还提供了多种方法对Python对象的信息进行查看和收集。
首先,查看系统环境变量信息。我们可以用env命令来查看当前的系统环境配置,命令显示结果如下:
Out[7]: {'Apple_PubSub_Socket_Render': '/private/tmp/com.apple.launchd.tWIX3I6rQu/Render', 'BDOS_SDK_HOME': '/Users/yuhongchun/data/myproject/bdos_sdk', 'HOME': '/Users/yuhongchun', 'HOST_IP': 'docker.for.mac.localhost', 'LANG': 'zh_CN.UTF-8', 'LOGNAME': 'yuhongchun', 'OLDPWD': '/Users/yuhongchun/data/myproject', 'PATH': '/Library/Frameworks/Python.framework/Versions/3.7/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/Applications/Wireshark.app/Contents/MacOS:/Users/yuhongchun/bin/:/Users/yuhongchun/data/myproject/bdos_sdk/bin:/Users/yuhongchun/.ssh/usm', 'PWD': '/tmp', 'SECURITYSESSIONID': '186a8', 'SHELL': '/bin/bash', 'SHLVL': '1', 'SSH_AUTH_SOCK': '/private/tmp/com.apple.launchd.5m7rR1eAnL/Listeners', 'TERM': 'xterm-256color', 'TERM_PROGRAM': 'Apple_Terminal', 'TERM_PROGRAM_VERSION': '404', 'TERM_SESSION_ID': '5A5776D6-41BD-4679-8AAE-2F5E7532D92D', 'TMPDIR': '/var/folders/qr/8w719nd531j0l4nvdvqlycd80000gn/T/', 'USER': 'yuhongchun', 'VERSIONER_PYTHON_PREFER_32_BIT': 'no', 'VERSIONER_PYTHON_VERSION': '2.7', 'XPC_FLAGS': '0x0', 'XPC_SERVICE_NAME': '0', '_': '/usr/bin/python', '__CF_USER_TEXT_ENCODING': '0x1F5:0x19:0x34'}
执行完Python程序以后,可以用who或whos打印所有的Python变量,示例如下:
#!/usr/bin/python import json jsonData = '{"a":1,"b":2,"c":3,"d":4,"e":5}'; text = json.loads(jsonData) print text
我们用run执行此程序以后,就可以用who或whos打印所有的Python变量了,以下是执行下who命令后的显示结果:
json jsonData text
最后,使用psearch查找当前命名空间(namespace)已有的Python对象。例如我们要查找以json开头的Python对象,可以通过如下命令实现:
In [90]: psearch json*
命令显示结果如下:
json jsonData
8)IPython中常用的其他magic函数如表2-1所示。
表2-1 IPython中常用的magic函数说明
9)IPython的快捷键操作方式易上手。它的常用的快捷键操作方式跟Linux下的Bash类似,熟悉Bash操作的读者应该很容易上手,如表2-2所示。
表2-2 IPython快捷键组合说明