如何在IPython中使用管道

时间:2011-04-21 07:18:03

标签: python scroll ipython pager ipython-magic

在Linux终端中,当一个命令的输出太长而无法在一个页面中读取时,我可以这样做:

cat file | less

这样我就可以阅读并向上和向下滚动cat文件的输出。

我怎样才能在IPython中做到这一点?

例如,我尝试了这个并且它不起作用:

whos | less

我最初的问题是来自whos的输出太多而无法通过Shift + Page Up看到,我不想更改滚动缓冲区。

4 个答案:

答案 0 :(得分:21)

在IPython中,您可以使用%page obj使用标准寻呼机(通常为obj)来显示对象less。或者,您可以增加终端的滚动缓冲区,这在任何情况下都可能很方便。

%page obj - 显示对象类似于IPython默认显示(类似repr),如果输出大小需要使用寻呼机

%page -r obj - 显示与打印类似的对象,如果尺寸需要使用寻呼机

%page只能使用普通名称或属性引用。它无法评估任意表达式,但您可以使用临时变量来解决此限制问题

tmp = ex * pr + ess - ion
%page tmp

答案 1 :(得分:2)

使用寻呼机应该是自动的。

来自manual

  

要将less配置为默认寻呼机,请执行以下操作:

     
      
  1. 将环境PAGER变量设置为less。
  2.   
  3. 将环境LESS变量设置为-r(以及默认情况下总是要传递给较少的任何其他选项)。这样可以更好地解释控制序列,这就是为终端提供颜色信息的方式。
  4.         

    对于bash shell,在〜/ .bashrc文件中添加以下行:

    export PAGER=less
    export LESS=-r
    

答案 2 :(得分:0)

系统shell访问

任何以!开头的输入行!字符被逐字传递(减去!当然)到底层操作系统。例如,键入!ls将在当前目录中运行“ls”。

来源:http://ipython.scipy.org/doc/rel-0.9.1/html/interactive/reference.html#id1

答案 3 :(得分:0)

在我的 IPython(7.21 版)管道上,在 ! 前缀之后确实有效。

基本用法:

!cat ~/.vimrc | less

即使使用 python 变量替换也能工作:

# send `some_large_python_str` to pastebin
!cat "{some_large_python_str}" | pastebin

注意在替换 " 周围使用引号 {...}