在不同窗口中输出pexpect

3 投票
1 回答
1142 浏览
提问于 2025-04-17 06:01

我现在在一个项目中,需要让测试脚本连接很多远程电脑(大约3到10台),通过SSH来做一些事情。 我开始使用pexpect,这个工具简单得像按个按钮一样,效果很好。

我想在测试过程中看到这些通信内容。我知道可以把日志重定向到屏幕上,但这样不同电脑的日志就会混在一起。 我希望每当有新的连接对象时,能打开一个新的终端窗口(或者控制台,随便什么都行)。这样我就能在不同的窗口里看到所有的通信内容。此外,我还希望在每个窗口里都能使用spawn.interact()的功能。 我觉得这应该是可能的,但我不知道怎么做。我想可能需要某种文件指针(或者管道)传递到新窗口里? (SecureCRT就有类似的功能,它有标签式的控制台窗口,可以单独访问,但那是个商业产品)

或者让我把问题简单化一下。 如果我这样做,我可以在新窗口中打开一个新的shell:

p=Popen(["cygstart", "bash"])

那么我该如何从我的脚本(父进程)中读写这个shell,以便在新窗口中看到内容呢?

如果你们能给我指个方向,我会非常感激。 只要告诉我该去找什么资料,或者在谷歌上搜索什么就行,因为我没有找到类似的问题。 我的环境是cygwin。

提前谢谢你们!

br:drv

1 个回答

0

你试过使用logfile这个参数吗?

child = pexpect.spawn('some_command')
mylog = open('/tmp/mylog','w')
child.logfile = mylog

这个参数会自动把所有的交流记录到一个文件里,包括你在调用spawn.interact()之后输入的命令。

想了解更多信息,可以去这个网站查看:http://pexpect.sourceforge.net/pexpect.html。搜索'logfile'可以找到相关的文档。

撰写回答