如何在IPython中打印stdout摘录

17 投票
4 回答
8370 浏览
提问于 2025-04-16 16:09

在Linux终端中,当一个命令的输出内容太长,无法在一页上全部显示时,我可以这样做:

cat file | less

这样我就可以查看并上下滚动这个文件的内容了。

那么在IPython中,我该怎么做呢?

举个例子,我试过这样做,但没有成功:

whos | less

我最开始的问题是,whos命令的输出太多,无法通过按Shift+Page Up来查看,而且我不想更改滚动缓冲区。

4 个回答

2

在我的IPython(版本7.21)中,管道功能是可以用的,前面要加上!这个符号。

基本用法:

!cat ~/.vimrc | less

即使在使用Python变量替换时也能正常工作:

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

注意在替换的部分{...}周围要用引号"

3

使用分页器应该是自动的。

来自手册

如果你想把 less 设置为默认的分页器,可以按照以下步骤操作:

  1. 把环境变量 PAGER 设置为 less。
  2. 把环境变量 LESS 设置为 -r(还有其他你希望默认传给 less 的选项)。这个设置告诉 less 如何正确处理控制序列,这样才能让你的终端显示颜色信息。

对于 bash 终端,你需要在你的 ~/.bashrc 文件中添加以下内容:

export PAGER=less
export LESS=-r
24

在IPython中,你可以使用 %page obj 来显示对象 obj,这个显示方式会用到你常用的分页工具(通常是 less)。另外,你也可以增加终端的滚动缓冲区,这样在查看内容时会更方便。

%page obj -- 以类似IPython默认显示的方式展示对象,输出内容如果太大就会使用分页工具。

%page -r obj -- 以类似打印的方式展示对象,输出内容如果太大也会使用分页工具。

%page 只能接受简单的名称或属性引用,不能直接计算复杂的表达式,但你可以使用一个临时变量来绕过这个限制。

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

撰写回答