How can I run shell (terminal) in Google Colab?

前端 未结 3 602
别那么骄傲
别那么骄傲 2021-02-02 17:28

I know that I can call !ls to issue ls command to shell.

But I want features like history or tab-completion.

Is it possible to do so in

相关标签:
3条回答
  • 2021-02-02 17:48

    Better try this -

    1. Install Teleconsole on Colab, its a package to use terminal over internet -
       !curl https://www.teleconsole.com/get.sh | sh
      
    2. Run below code on colab notebook to use 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()) 
      
      You should get output something like -
       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. Either open the web interface by following the link for accessing the terminal or open a local shell terminal and install Teleconsole using the command -
       curl https://www.teleconsole.com/get.sh | sh
      
      Then use the below code to join the terminal using Teleconsole Id you got in step No. 2-
       teleconsole join <Teleconsole ID>
      

    This method can also be tunneled through ssh with some additional steps.

    0 讨论(0)
  • 2021-02-02 18:00

    Just type the following. It will spawn a bash session.

    !bash
    
    0 讨论(0)
  • 2021-02-02 18:07

    You can use jQuery Terminal Emulator backed with google.colab.kernel.invokeFunction

    Here's an example notebook.

    The key part is here, where you back it with shell function.

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

    And here's how you use 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));
    }
    

    Here's a screenshot.

    Update (7/2020)

    I have taken @Anant's answer and add it into my library. Now you can run console easily with just

    !pip install kora
    from kora import console
    console.start()  # and click link
    

    Update (12/2020)

    If you subscribe to Colab Pro, terminal is now available. Just click the 'Terminal' icon on the left pane.

    0 讨论(0)
提交回复
热议问题