如何在Google Colab中运行shell(终端)?

时间:2019-12-13 08:27:35

标签: shell command-line terminal google-colaboratory

我知道我可以调用!ls向外壳发出ls命令。

但是我想要历史记录或制表符补全之类的功能。

在Google Colab中可以这样做吗?

3 个答案:

答案 0 :(得分:8)

只需键入以下内容。它将产生一个bash会话。

!bash

答案 1 :(得分:6)

最好尝试一下-

  1. 在Colab上安装Teleconsole,该软件包可在互联网上使用终端-
     !curl https://www.teleconsole.com/get.sh | sh
    
  2. 在colab笔记本上运行以下代码以使用Teleconsole-
     import subprocess as sp
     process = sp.Popen("teleconsole",shell=True,stdin=sp.PIPE,stdout=sp.PIPE,stderr=sp.PIPE)
     for i in range(6):
       print(process.stdout.readline().decode()) 
    
    您应该得到类似以下的输出:
     Starting local SSH server on localhost...
     Requesting a disposable SSH proxy on eu.teleconsole.com for root...
     Checking status of the SSH tunnel...
    
     Your Teleconsole ID: eu88d75d24084905shgdjhjhfgd1934e55c3786438a3
    
     WebUI for this session: 
     https://eu.teleconsole.com/s/88d75d24084905shgdjhjhfgd1934e55c3786438a3
    
  3. 通过访问终端的链接打开Web界面,或者打开本地Shell终端并使用以下命令安装Teleconsole-
     curl https://www.teleconsole.com/get.sh | sh
    
    然后使用下面的代码通过步骤2中获得的Teleconsole ID加入终端。
     teleconsole join <Teleconsole ID>
    

此方法还可以通过一些其他步骤通过ssh进行隧道传输。

答案 2 :(得分:0)

您可以使用以google.colab.kernel.invokeFunction为后盾的jQuery Terminal Emulator

这里是example notebook

关键部分在这里,您可以使用shell函数对其进行支持。

def shell(command):
  return JSON([getoutput(command)])
output.register_callback('shell', shell)

这是invokeFunction的使用方式:

try {
    let res = await google.colab.kernel.invokeFunction('shell', [command])
    let out = res.data['application/json'][0]
    this.echo(new String(out))
} catch(e) {
    this.error(new String(e));
}

这是屏幕截图。

enter image description here