Module lib.shell.shell

Class defining a minimalist shell, directly executable on the board. We modify directories, list, delete, move files, edit files …

Expand source code
# Distributed under Pycameresp License
# Copyright (c) 2023 Remi BERTHOLET
# pylint:disable=too-many-lines
# pylint:disable=consider-using-f-string
# pylint:disable=unspecified-encoding
""" Class defining a minimalist shell, directly executable on the board.
We modify directories, list, delete, move files, edit files ...
"""
# pylint:disable=wrong-import-position
import sys
sys.path.append("lib")
sys.path.append("simul")
from tools import logger,filesystem,terminal,watchdog,console

async def shell_task():
        """ Asynchronous shell task """
        import uasyncio
        try:
                from server.server import Server
        except:
                Server = None

        console.Console.print("\nPress key to start shell")
        if filesystem.ismicropython():
                polling1 = 2
                polling2 = 0.01
        else:
                polling1 = 0.1
                polling2 = 0.5
        while 1:
                # If key pressed
                if terminal.kbhit(polling2):
                        character = terminal.getch()[0]

                        # Check if character is correct to start shell
                        if not ord(character) in [0,0xA]:
                                # Ask to suspend server during shell
                                if Server is not None:
                                        Server.suspend()

                                        # Wait all server suspended
                                        await Server.wait_all_suspended()

                                # Extend watch dog duration
                                watchdog.WatchDog.start(watchdog.LONG_WATCH_DOG*2)

                                # Get the size of screen
                                terminal.refresh_screen_size()

                                # Start shell
                                print("")
                                logger.syslog("<"*10+" Enter shell " +">"*10)
                                print("Use 'exit' to restart server or 'quit' to get python prompt")
                                import shell.shellcore
                                shell.shellcore.shell_sh(throw=True)
                                print("")
                                logger.syslog("<"*10+" Exit  shell " +">"*10)

                                del sys.modules["shell.shellcore"]

                                # Resume watch dog duration
                                watchdog.WatchDog.start(watchdog.SHORT_WATCH_DOG)

                                # Resume server
                                if Server is not None:
                                        Server.resume()
                else:
                        await uasyncio.sleep(polling1)

Functions

async def shell_task()

Asynchronous shell task

Expand source code
async def shell_task():
        """ Asynchronous shell task """
        import uasyncio
        try:
                from server.server import Server
        except:
                Server = None

        console.Console.print("\nPress key to start shell")
        if filesystem.ismicropython():
                polling1 = 2
                polling2 = 0.01
        else:
                polling1 = 0.1
                polling2 = 0.5
        while 1:
                # If key pressed
                if terminal.kbhit(polling2):
                        character = terminal.getch()[0]

                        # Check if character is correct to start shell
                        if not ord(character) in [0,0xA]:
                                # Ask to suspend server during shell
                                if Server is not None:
                                        Server.suspend()

                                        # Wait all server suspended
                                        await Server.wait_all_suspended()

                                # Extend watch dog duration
                                watchdog.WatchDog.start(watchdog.LONG_WATCH_DOG*2)

                                # Get the size of screen
                                terminal.refresh_screen_size()

                                # Start shell
                                print("")
                                logger.syslog("<"*10+" Enter shell " +">"*10)
                                print("Use 'exit' to restart server or 'quit' to get python prompt")
                                import shell.shellcore
                                shell.shellcore.shell_sh(throw=True)
                                print("")
                                logger.syslog("<"*10+" Exit  shell " +">"*10)

                                del sys.modules["shell.shellcore"]

                                # Resume watch dog duration
                                watchdog.WatchDog.start(watchdog.SHORT_WATCH_DOG)

                                # Resume server
                                if Server is not None:
                                        Server.resume()
                else:
                        await uasyncio.sleep(polling1)