适用于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 的哈希值
算法 | 哈希摘要 | |
---|---|---|
SHA256 | 6d9a13ac90d0cd3d2bfeff0661ad73e2ee5f5e895bd5a0d9f885e1b5e5e09713 |
|
MD5 | 85295916b2e787d2d0273768c060c6f0 |
|
BLAKE2b-256 | 3ca69d53ff836247d36d7b5bf0123928c755f744d1f59f43d4da7eca24469e7f |