附录B 更多IPython系统相关内容
B.2 与操作系统交互
IPython的另一个特性是它可以让你无缝地访问文件系统和操作系统shell。这意味着,除了特殊情况,你可以像在Windows或Unix(Linux、macOS)shell中那样执行大多数标准命令行操作,而无须退出IPython。这些命令包括shell命令、更改目录命令以及将命令的结果存储在Python对象(列表或字符串)中。此外,还有简单的命令别名和目录书签功能。
表B-1是对魔术函数及其调用shell命令的语法的总结。我将在下一节简要地介绍这些特性。
B.2.1 shell命令及其别名
在IPython中用感叹号!或者bang开始一行,就是告诉IPython在系统shell中执行bang命令后所有的命令。这意味着你可以删除文件(使用rm或del,取决于你的操作系统)、更改目录或执行任何其他进程。
通过将以!转义的表达式赋值给变量,你可以把命令行的shell输出存储在一个变量中。例如,在我的基于Linux系统的机器上,机器通过以太网连接到互联网上,我可以以Python变量的形式获得我的IP地址:
In [1]: ip_info = ! ifconfig wlan0 | grep "inet "
In [2]: ip_info[0].strip()
Out[2]: 'inet addr:10.0.0.11 Bcast:10.0.0.255 Mask:255.255.255.0'
返回的Python对象ip_info实际上是一个包含各种版本的控制台输出的自定义列表类型。
在使用!时,IPython也可以替换当前环境中定义的Python值。为此,请在美元符号$前面加上变量名称:
In [3]: foo = 'test*'
In [4]: ! ls $foo
test4.py test.py test.xml
- % alias魔术函数可以为shell命令定义自定义快捷键。举一个简单的例子:
In [1]: %alias ll ls -l
In [2]: ll /usr
total 332
drwxr-xr-x 2 root root 69632 2012-01-29 20:36 bin/
drwxr-xr-x 2 root root 4096 2010-08-23 12:05 games/
drwxr-xr-x 123 root root 20480 2011-12-26 18:08 include/
drwxr-xr-x 265 root root 126976 2012-01-29 20:36 lib/
drwxr-xr-x 44 root root 69632 2011-12-26 18:08 lib32/
lrwxrwxrwx 1 root root 3 2010-08-23 16:02 lib64 -> lib/
drwxr-xr-x 15 root root 4096 2011-10-13 19:03 local/
drwxr-xr-x 2 root root 12288 2012-01-12 09:32 sbin/
drwxr-xr-x 387 root root 12288 2011-11-04 22:53 share/
drwxrwsr-x 24 root src 4096 2011-07-17 18:38 src/
你可以像在命令行上一样使用分号分隔多个命令,并执行:
In [558]: %alias test_alias (cd examples; ls; cd ..)
In [559]: test_alias
macrodata.csv spx.csv tips.csv
你会注意到IPython会在会话关闭后“忘记”所有你在交互中定义的别名。要创建永久别名,你需要使用配置系统。
B.2.2 目录书签系统
IPython有一个简单易用的目录书签系统,允许你保存通用目录的别名,以便你轻松地跳转。例如,假设你想创建一个指向本书辅助材料的书签:
In [6]: %bookmark py4da /home/wesm/code/pydata-book
一旦你运行上面的代码,当我们使用% cd魔术函数时,我们可以使用我们定义的任何书签:
In [7]: cd py4da
(bookmark:py4da) -> /home/wesm/code/pydata-book/home/wesm/code/pydata-book
如果书签名称与当前工作目录中的目录名称冲突,你可以使用-b标志进行覆盖并使用书签位置。使用%bookmark和-l选项,将列出你所有的书签:
In [8]: %bookmark -l
Current bookmarks:
py4da -> /home/wesm/code/pydata-book-source