# python-terminal **Repository Path**: xiang-dong/python-terminal ## Basic Information - **Project Name**: python-terminal - **Description**: No description available - **Primary Language**: Unknown - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-09-30 - **Last Updated**: 2024-09-30 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # py-terminal ## 介绍 py-terminal整合本地和远程的终端操作 # 安装 ```bash pip install PyCmdTerminal ``` ## 使用 注意: 结束请使用close()方法保证打开的资源被释放以及保证正常结束当前进程,不要在析构(__del__)中调用close可能出现不可控的结果,推荐使用上下文管理器(`with`) ```python from py_terminal import LocalTerminal from py_terminal import RemoteTerminal with LocalTerminal() as terminal: terminal.get_os() with RemoteTerminal(host="xx.xx.xx.xx", username="user") as r_terminal: r_terminal.get_os() ``` # 接口 ## Class ` _Terminal` #### 参数 -

logger (可选)

用于记录消息的记录器实例(默认为名为“RemoteTerminal”的记录器)。 -

log_level (可选)

日志记录级别(默认为`NOTSET`)。 #### 方法 -

execute_command(command: `str`, timeout: `Optional[int]`, password: `Optional[str]`) -> `dict`

执行命令,并返回有关执行的详细信息。 阻塞 `command (必选)`:要执行的命令。 `timeout (可选)`:命令执行的超时时间,以秒为单位(默认值为`None`)。 `password (可选)`:用于身份验证的密码(默认为`None`)。 -

async_execute_command(command: `str`) -> `List[int]`

执行命令而不等待它完成,并返回该命令的进程和子进程ID。 非阻塞 `command (必选)`:要在远程服务器上执行的命令。 -

get_sync_process_output(pid: `int`, _callable_f: `Callable[[bytes, bytes], None]`, wait: `bool`) -> `Union[Tuple[AsyncThread, asyncio.Event], None]`

获取给定[异步执行](#base-asyncexecute-command)的进程的标准输出和标准错误。 `pid (必选)`:进程的 PID,用于获取该进程的输出。 `callable_f (可选)`:处理标准输出和标准错误的回调函数,默认使用 `print` 输出。 `wait (可选)`:是否同步等待进程完成输出。如果为 True,则阻塞等待进程输出;如果为 False,异步执行进程的输出处理。默认为 True。 -

read(path: `str`, mode:`str`, decode="utf-8", chunk_size: `int`, position: `int`) -> `Union[Iterator[Any], str, Generator[str, Any, Any]]`

读取指定路径下的文件内容。 该方法根据“块大小”和“模式”的值读取文件。如果' chunk_size '为-1,则读取整个文件。 如果' chunk_size '大于-1,它将逐块读取文件内容,并返回一个迭代器以逐块读取。 “模式”参数决定如何解释文件内容。 `path (必选)`:要读取的文件的路径。 `mode (可选)`:解释文件内容的模式。默认为“r”(文本模式)。使用“rb”表示二进制模式。 `decode (可选)`:decode是用于解码文件的编码。 `chunk_size (可选)`:要读取的每个块的大小。默认为-1,这意味着读取整个文件。如果大于-1,则按块读取。 `position (可选)`:从文件中读取的起始位置。默认为0,这意味着从文件的开头开始。 -

write(path: `str`, data: `Union[str, bytes]`, mode: `str`) -> `None`

将数据写入指定路径的文件。 `path (必选)`:要写入的文件的路径。 `data (必选)`:要写入文件的数据。对于文本模式应为字符串,对于二进制模式应为字节。 `mode (可选)`:打开文件的模式。默认为“w”(写模式)。使用“wb”表示二进制写入模式,“a”表示追加模式,依此类推。 -

delete(path: `str`) -> `bool`

删除指定路径的文件或目录。如果路径不存在,将引发“FileNotFoundError”。如果在删除过程中出现任何其他错误,将引发“RuntimeError”。 `path (必选)`:要删除的文件或目录的路径。 -

open_file(path: `str`, mode: `str`) -> `Union[BinaryIO, TextIO]`

基于指定模式打开文件。返回文件对象 `path (必选)`:要打开文件的路径。 `sftp (可选)`:打开文件的模式。默认为“r”(文本模式)。 支持的模式包括“r”、“w”、“x”、“a”、“b”、“t”及其与“+”的组合。(默认为`r`) -

get_size(path: `str`, sftp) -> `int`

获取路径的大小。如果是文件,返回文件大小; 如果是一个目录,递归计算目录中所有文件的总大小。 `path (必选)`:文件或目录的路径。 `sftp (可选)`:用于与服务器交互的SFTP客户端实例。 -

is_dir(path: `str`, sftp) -> `bool`

检查指定的路径是否是目录。 `path (必选)`:要检查的文件或目录路径。 `sftp (可选)`:用于与服务器交互的SFTP客户端实例。 -

is_file(path: `str`, sftp) -> `bool`

检查指定的路径是否是文件。 `path (必选)`:要检查的文件或目录路径。 `sftp (可选)`:用于与服务器交互的SFTP客户端实例。 -

is_link(path: `str`, sftp) -> `bool`

用于检查给定的路径是否是一个符号链接(symlink) `path (必选)`:要检查的文件或目录路径。 `sftp (可选)`:用于与服务器交互的SFTP客户端实例。 -

path_exists(path: `str`, sftp) -> `bool`

检查指定的路径是否存在。 `path (必选)`:要检查的文件或目录路径。 `sftp (可选)`:用于与服务器交互的SFTP客户端实例。 -

pid_exists(pid: `int`) -> `bool`

检查指定的进程ID是否存在。 `pid (必选)`:要检查的进程ID。 -

process_exists(identifier: `Union[str, int]`) -> `bool`

使用PID或进程名称检查是否正在运行。 `identifier (必选)`:要检查的进程ID (PID)或进程名称。 -

get_pname_by_pid(pid: `int`) -> `Optional[str]`

检索与指定进程ID关联的进程名。 `pid (必选)`:检索的进程ID。 -

get_pids_by_pname(pname: `str`) -> `List[int]`

检索与指定进程名称关联的所有进程id。 `pname (必选)`:检索id的进程名称。 -

kill(process_identifier: `Optional[Union[int, str, List[Union[int, str]]]]`, force: `bool`, timeout: `int`, kill_all: `bool`) -> `bool`

通过PID或进程名称终止进程。 `process_identifier (必选)`: 要终止的进程的PID或进程的名称或者集合。 `force (可选)`: 如果是`True`,如果`SIGTERM`不起作用,升级到强制终止(`SIGKILL`) (默认值为`False`)。 `timeout (可选)`: 发送SIGTERM后等待进程终止的时间(秒)(默认值为5), 超时会引发错误。 `kill_all (可选)`: 如果为真,则终止所有与进程名匹配的进程。如果为False,则仅终止单个进程,并在发现多个PID时引发错误(默认值为False)。 -

command_exists(cmd: `str`) -> `bool`

判断给定的命令是否存在。 `cmd (必选)`:表示要检查的命令名称(如 ls, python, git 等)。 -

get_os() -> `str`

获取机器的操作系统。 -

close()

关闭打开的资源,包括异步执行的输出线程、协程和打开的文件资源 -

list_dir(self, path: `str`, sftp=None) -> `List[str]`

返回指定目录下的所有文件和目录的名称列表。 `path (必选)`:要列出内容的目录的路径。这个参数是可选的,默认为当前目录 (.)。 -

mkdir(self, path: `str`, mode=0o777, exist_ok=False, sftp=None)

创建单一目录 `path (必选)`:要创建的目录的路径。可以是相对路径或绝对路径。 `mode (可选)`:用于指定创建目录的权限,默认是 0o777。注意,该权限在某些平台上可能不起作用。 `exist_ok (可选)`:如果设置为 True,当目标目录已经存在时不会抛出异常;如果为 False 且目录已经存在,会抛出 FileExistsError。 -

makedirs(self, path: str, mode=0o777, exist_ok=False, sftp=None)

递归创建多级目录 `path (必选)`:要创建的目录的路径。可以是相对路径或绝对路径。 `mode (可选)`:用于指定创建目录的权限,默认是 0o777。注意,该权限在某些平台上可能不起作用。 `exist_ok (可选)`:如果设置为 True,当目标目录已经存在时不会抛出异常;如果为 False 且目录已经存在,会抛出 FileExistsError。 -

get_subprocess_pids(pid: `int`) -> `List[int]`

获取指定pid所有的子进程ID `pid (必选)`: 进程的ID。 -

move(source_path: `str`, dest_path: `str`) -> `bool`

移动文件或目录到指定的位置 `source_path (必选)`:源路径 `dest_path (必选)`:目标路径 -

copy(source_path: `str`, dest_path: `str`) -> `bool`

复制文件或目录到指定的位置 `source_path (必选)`:源路径 `dest_path (必选)`:目标路径 -

get_async_process_status(pid: `Union[int, Tuple[int, ...]]`) -> `Union[int, None]`

获取异步执行程序的退出状态 `pid (必选)`:使用`async_execute_command`执行返回的pid ## Class `RemoteTerminal` #### 介绍 继承[`paramiko.SSHClient](https://docs.paramiko.org/en/latest/api/client.html#paramiko.client.SSHClient)`和[`_Terminal(基类)`](#base-terminal)类,实现对远程设备的终端操作 #### 参数 继承[`_Terminal(基类)`](#base-terminal-parm)所有参数 -

host (必选)

SSH服务器的主机名或IP地址。 -

username (必选)

用于身份验证的用户名。 -

password (可选)

身份验证的密码(默认为空)。 -

port (可选)

SSH连接的端口号(默认为22)。 -

try_retry_password (可选)

失败时是否重试密码输入。 -

try_retry_password_times (可选)

密码输入的重试最大次数(默认值为3)。 -

use_terminal_input_password (可选)

是否允许终端输入密码(默认值为False)。 -

terminal_password_show (可选)

在终端中键入时是否显示密码(默认为False)。 -

timeout (可选)

连接远程的超时时间(秒)(默认值为10)。 -

allow_agent: (可选)

是否允许使用SSH代理(默认值为True)。 -

look_for_keys (可选)

是否搜索可发现的私钥文件(默认值为True)。 -

key_filename (可选)

私钥的文件名或文件名列表(默认为无)。 -

host_key_policy (可选)

自定义主机密钥策略(默认为“WarningPolicy”)。 -

known_hosts_file (可选)

用于主机密钥验证的已知主机文件的路径(默认为无)。 #### 方法 继承父类[`paramiko.SSHClient`](https://docs.paramiko.org/en/latest/api/client.html#paramiko.client.SSHClient)和[`_Terminal(基类)`](#base-terminal-method)所有方法 -

check_connect() -> `bool`

通过执行一个简单的命令来检查SSH连接是否处于活动状态。 -

push(local_path: `str`, remote_path: `str`) -> `bool`

将文件或目录从本地系统上传到远程服务器,包括元数据。 `local_path (必选)`:本地文件或目录的路径。 `remote_path (必选)`:文件或目录在远程服务器上的保存路径。 -

pull(remote_path: str, local_path: str) -> `bool`

将文件或目录从远程服务器下载到本地系统,包括元数据。 `remote_path (必选)`:远程文件或目录的路径。 `local_path (必选)`:本地保存文件或目录的路径。 -

async_execute_command(command: `str`) -> `Optional[int]`

在远程服务器上执行命令而不等待它完成, 并返回该命令的进程ID。[*重载基类方法*](#base-asyncexecute-command);注意:不支持windows `command (必选)`:要在远程服务器上执行的命令。 -

reboot(force: `bool`, wait_time: `int`, max_retries: `int`) -> `bool`

重新启动远程服务器并等待连接。默认情况下,它会尝试使用“reboot”或“shutdown -r now”进行正常重启。 `force (可选)`:如果为`True`,使用更强制的方法重新启动(如果可用)(默认值为`False`)。 `wait_time (可选)`:重新启动后尝试重新连接前等待的时间(秒)(默认值为`10`) `max_retries (可选)`:重新启动后尝试重新连接的最大次数。(默认值为`10`) -

get_transport() -> `Transport`

获取自定义SSH传输。 -

reconnect(timeout: `str`=None) -> `bool`

重新连接远程。 `timeout`: 设置连接超时时间, 默认创建实例时的时长。 ## Class `LocalTerminal` #### 介绍 继承[`_Terminal(基类)`](#base-terminal)类,实现本地终端操作和基础操作 #### 参数 继承[`_Terminal(基类)`](#base-terminal-parm)所有参数 #### 方法 继承[`_Terminal(基类)`](#base-terminal-method)所有方法