mirror of http://git.sairate.top/sairate/doc.git
74 lines
2.4 KiB
Python
74 lines
2.4 KiB
Python
from abc import ABC, abstractmethod
|
|
from types import TracebackType
|
|
from typing import Any, List, Optional, Tuple
|
|
|
|
from cerulean.util import BaseExceptionType
|
|
|
|
|
|
class Terminal(ABC):
|
|
"""Interface for Terminals.
|
|
|
|
This is a generic interface class that all terminals inherit \
|
|
from, so you can use it wherever any terminal will do.
|
|
|
|
In order to do something useful, you'll want an actual terminal,
|
|
like a :class:`LocalTerminal` or an :class:`SshTerminal`.
|
|
|
|
Terminals may hold resources, so you should either use them \
|
|
with a ``with`` statement, or call :meth:`close` on them \
|
|
when you are done with them.
|
|
"""
|
|
|
|
def __enter__(self) -> 'Terminal':
|
|
"""Enter context manager."""
|
|
return self
|
|
|
|
def __exit__(self, exc_type: Optional[BaseExceptionType],
|
|
exc_value: Optional[BaseException],
|
|
traceback: Optional[TracebackType]) -> None:
|
|
"""Exit context manager."""
|
|
pass
|
|
|
|
def close(self) -> None:
|
|
"""Close the terminal.
|
|
|
|
This closes any connections and frees resources associated \
|
|
with the terminal. :class:`LocalTerminal` does not require \
|
|
this, but terminals that connect to remote machines do. You \
|
|
may want to always either close a Terminal, or use it as a \
|
|
context manager, to avoid problems if you ever change from \
|
|
a local terminal to a remote one.
|
|
"""
|
|
pass
|
|
|
|
def __eq__(self, other: Any) -> bool:
|
|
return NotImplemented
|
|
|
|
@abstractmethod
|
|
def run(self,
|
|
timeout: float,
|
|
command: str,
|
|
args: List[str],
|
|
stdin_data: str = None,
|
|
workdir: str = None) -> Tuple[Optional[int], str, str]:
|
|
"""Run a shell command.
|
|
|
|
The command will be run in the default shell, and arguments are
|
|
**not** quoted automatically. If you have untrusted or unknown
|
|
input, be sure to quote it using `quote()` from the `shlex`
|
|
module of the Python standard library.
|
|
|
|
Args:
|
|
timeout: How long to wait for the result(s)
|
|
command: The command to run.
|
|
args: A list of arguments to pass
|
|
stdin_data: Data to pass to standard input
|
|
workdir: Working directory to execute in
|
|
|
|
Returns:
|
|
A tuple containing the exit code, standard output, and \
|
|
standard error output.
|
|
|
|
"""
|
|
pass
|