我们在工作中经常使用 linux 下的命令行模式,也就是 shell 。
但是 shell 有一个问题,就是必须一条一条执行命令。
输入命令,等待执行结果,继续输入命令,等待结果。好像一个循环。
而如果我们使用文本编辑器,编写脚本来执行,却又失去了交互的体验。
我们现在提到的魔力编辑,就是 IPython 在命令行和文本之间的一种折中,汲取了两者的优点。
我们使用 lsmagic来查看全部魔力编辑的内建函数,使用%magic 命令查看魔力函数的帮助
当然你要觉得 %magic 太多了。可以用%quickref来查看魔力函数的 “一句话”版本。
==================================================我们如果希望使用 IPython 来取代 shell 。最大的问题其实是命令不互通。很多系统命令我们要在IPython里实现的话会恨麻烦。就像之前我们做过的那样,调用 subprocess因此我们可以通过我们接触到的第一个魔力函数 alias 来解决这个问题。
alias到的alias 命令可以创建一个IPython的快速方式,执行系统命令。
我们看到,在 IPython 环境下直接执行 bash 命令是无效的。但是我们通过 alias 对 bash 命令生成一个别名 nst ,再执行就可以了。当然 bash 命令是可以加参数的。我们的例子就加了 -lptn 参数,在执行别名的时候,一起执行了。同样我们在 alias 已经定义的别名后面加其他操作也是可以的。
好下面我们再讨论一个情况。如果我们要输入多个可变参数,能否有更方便的 alias 定义方法.
这里用到了 %s ,从例子中我们得知,我们使用 %s 定义了2个字符型的插入参数。在使用命令的过程中,我们将参数跟在命令后面,会逐个读入。如果参数少于定义的数量会报错参数多余定义的数量会全部跟在后面。
store要保存定义的别名,以方便今后使用,需要用到 %store 魔力函数
我们保存后退出
再次进入后执行 store -r 读取保存的 alias 。就可以使用了。==================================================在IPython下执行shell命令我们上面说了别名方法执行 bash 的命令。下面我们再介绍一种更简单的方法。命令前加“!”
很方便,当然我们在 IPython 里不能传递个参数是不是很 low 。
和bash 一样,我们使用 $变量名 在 !下来调用变量。可以使用变量,当然可以把结果赋值咯。
这里我们演示了把 bash 执行结果赋值给一个变量,顺便普及下中文的输出法。直接输出变量 l 我们看到是乱码,因为我们并没有引入 chinese code ,显示不了中文。因此我们可以使用 print str(变量名).decode('string_escape')显示中文
总结下,如果是常用的命令,就使用 alias 自己定制成自己顺手的,但是偶尔执行一次的话 !足以
rehash/rehashx如果我们希望将全部的 shell 都创建一个 alias 可以使用到这个魔力函数。虽然恨方便,但是确实不建议这么做,因为用 !就很好了。这里就不做演示了。