Python 如何通过函数抑制执行命令行脚本(行以“!”)的Google Colaboratory单元格中的输出

Python 如何通过函数抑制执行命令行脚本(行以“!”)的Google Colaboratory单元格中的输出,python,jupyter-notebook,ipython,jupyter,google-colaboratory,Python,Jupyter Notebook,Ipython,Jupyter,Google Colaboratory,在GoogleColab中,我通过放置来执行命令行脚本在行前面并执行单元格 比如说 !pip install adjustText 如果我想阻止这个单元格的输出,我可以这样做 %%capture !pip install adjustText 但是,我有这样一种情况:我通过一个函数执行命令行脚本,并仅抑制该命令行的输出,而不抑制正在执行该命令行的单元格的输出 比如说 第1单元: %%capture def installAdjust(): !pip install adjustTex

在GoogleColab中,我通过放置
来执行命令行脚本在行前面并执行单元格

比如说

!pip install adjustText
如果我想阻止这个单元格的输出,我可以这样做

%%capture
!pip install adjustText
但是,我有这样一种情况:我通过一个函数执行命令行脚本,并仅抑制该命令行的输出,而不抑制正在执行该命令行的单元格的输出

比如说

第1单元:

%%capture
def installAdjust():
    !pip install adjustText
def installAdjust():
   %%capture
    !pip install adjustText
第2单元:

for v in range(10):
    print(v)
    installAdjust()
%%capture
for v in range(10):
    print(v)
    installAdjust()
这不会抑制
的输出!pip安装调整文本
。我不想禁止Cell2的非命令行输出,所以我不能这样做

第2单元:

for v in range(10):
    print(v)
    installAdjust()
%%capture
for v in range(10):
    print(v)
    installAdjust()
而且,这也不起作用

第1单元:

%%capture
def installAdjust():
    !pip install adjustText
def installAdjust():
   %%capture
    !pip install adjustText

使用python实用程序中的
capture\u输出

from IPython.utils import io
for v in range(10):
    print(v)
    with io.capture_output() as captured:
      installAdjust()
将来,只要一个神奇的函数不够用,就搜索正在访问的核心属性并自己访问它们

答案来自:


您可以在单元格中使用“%%capture”魔术函数(不带引号)来抑制该特定单元格的输出,无论它使用命令行代码还是某些python代码,魔术函数基本上是jupyter笔记本的一个属性,但由于google colab是在此基础上构建的,因此它也可以在那里工作。 例如:


只需将输出重定向附加到命令:

重定向输出和错误,添加
&>/dev/null

!mkdir /content/notexist/blah &> /dev/null
!mkdir /content/notexist/yeaa > /dev/null
重定向输出,但不是错误,添加
/dev/null

!mkdir /content/notexist/blah &> /dev/null
!mkdir /content/notexist/yeaa > /dev/null
在下面的示例中,两个命令都失败,但我们忽略了第二个命令的错误


哇,这个答案救了我一天!