跳转到主要内容

适用于Linux和Python3的替代pexpect

项目描述

快速开始

安装包

pip install --user processcontroller

导入主类

from processcontroller import ProcessController

创建新实例

process_controller = ProcessController()

ProcessController()实例

方法

  • run()方法

    运行程序(下文详细说明命令和选项)

process_controller.run(command, options)
  • send()方法

    将字符串或bytearray发送到子程序的stdin,你通常会在回调或分离状态下使用它

process_controller.send(str|bytes)
  • close()方法

    关闭子程序的stdin,使其达到EOF,你通常会在回调或分离状态下使用它

process_controller.close()
  • kill()方法

    向子程序发送SIGKILL信号,之后的return_value应该是(pid, 9)。 (说实话,不应该这样使用)

process_controller.kill()
  • wait()方法

    用于同步调用者与 ProcessController 的分离实例。等待队列缓冲区被处理和清空。如果你的进程读取 stdin,例如 bash 或 cat 等,务必调用 close(),否则会陷入无限循环

process_controller.wait()

属性

  • return_value

    是子程序的返回值,如果正在运行则为 - (0, 0),如果已终止则为 (pid, status)

函数参数

ProcessController.run()

command

命令参数必须是一个数组,例如

['/usr/bin/python', 'file.py']

options

目前支持以下键:'when', 'input', 'echo' 和 'detached'

  • when

此键用于监听子程序 STDOUT 上发生的事件。值必须是一个事件数组。实际上,“event”是与某些模式匹配的

'when': [
   ['^SomeRegex.*\n', callback],
   ['^An other one.\n', cb]
   ['^prompt>\$ $', cb]
]

请注意结束行,每次向缓冲区添加字符时都会调用匹配,这有助于匹配提示,也许将来我会添加一个选项来避免这种昂贵的操作。每次找到 'n' 字符时,该行都会被处理一次并重置为 ''

回调函数将使用两个参数调用:ProcessController 实例和匹配的字符串

def callback(processcontroller, string)

当子程序需要时,你可以在回调中使用 ProcessController 实例的 send 函数来自动化用户输入

def cb(p, s):
   c.send('some input')
  • input

此键用于在运行子程序之前预先填充其 stdin

pc = ProcessController()
pc.run(['/bin/bash'], {
   'input': 'echo test && exit'
})

可以设置一个输入数组

'input': ['one', 'two', 'three']  # sends "one\ntwo\nthree\n"

可以输入 str 或 bytes,转换会为你处理

  • echo

此键是一个默认为 False 的布尔值。当设置为 True 时,ProcessController 将打印发送到子程序的位置的输入

  • detached

此键用于使程序在自己的线程中运行,使 run 调用非阻塞

process_controller.wait()

pc = ProcessController()
pc.run(['/bin/bash'], {
   'detached': True
})
pc.send('echo test')  # will print test to stdout
pc.close()  # close stdin of subprogram, so that bash will read EOF
  • private

此键用于防止将子程序的 STDOUT 写入主程序的 STDOUT,但可以通过当事件监听器帮助打印所需的内容,实际上,输出的行将保留在回调函数的参数中

  • readmode

使用此键按字符逐个读取子程序 STDOUT,或按行逐行读取(默认)。其值可以是 'line' 或 'char'。对于读取提示或其他不以 EOL 结尾的内容很有用

  • decode

此选项用于告诉 processcontroller 是否解码从子程序读取的内容,默认为 True

别忘了,每次你想执行新的子程序时,都必须创建一个新的 ProcessController 实例

请随时阅读测试和代码,以更好地理解

享受吧

项目详情


下载文件

下载适合您平台的文件。如果您不确定要选择哪个,请了解更多关于 安装软件包 的信息。

源分布

processcontroller-1.5.0.tar.gz (4.7 kB 查看哈希值)

上传时间

由以下支持