pexpect 获取申请信息

pexpect get application information

我正在使用来自 linux 主机的 运行 nano 的 pexpect,我试图找到一种方法从 pexpect 获取信息,以便我可以重建 nano(或 vi 或任何终端应用程序) ) 其他地方。

所以像这样:

p = pexpect.spawn('/bin/bash')
p.sendline('nano cheese')
#Get the tty information for the nano/vi/whatever UI#

我基本上想转发信息(信息是应用程序UI)而不直接与之交互,这可能吗?

通常情况下,处理方法是.interact(),将子进程放入当前进程。但是,听起来您不想交互,而是想从父级控制子流程。

像这样的东西应该可以工作:

import pexpect

p = pexpect.spawn('nano cheese')
output = []
while p.isalive():
    output.append(p.read_nonblocking(100000))
    #Conditionals about what is in output could be put here. 
    #You can also tell pexpect to block until it finds specific strings, with .expect()
    p.sendline(input().encode())

尝试按照 "nano" 中应输入的内容进行操作,我想你想做这样的事情:

y       #answer yes to first question
^X      #exit nano
n       #no, don't save
<enter> #anything sent should end the process here.

这假设 "nano" 没有询问意外的事情,比如已经有一个文件或其他东西,等等。您可以使用 p.expect 根据输出中显示的字符串启动某些操作.打印输出以查看 "nano" 发送给您的内容。

print(output)