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)
我正在使用来自 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)