如何让Python实现类似Tcl/expect的执行命令实时输出功能?
在Python的pexpect中实现类似Tcl/expect的默认输出功能
Tcl/expect默认会同时打印发送的命令和子进程返回的输出,在pexpect中可以通过配置logfile和logfile_send属性实现相同效果,以下是具体实现方式:
输出到控制台
通过将这两个属性指向标准输出的字节流缓冲区,就能让所有交互内容实时打印到控制台:
#!/usr/bin/env python3 import pexpect import sys shellprompt = "] # " # 启动SSH进程 child = pexpect.spawn('ssh admin@XYZ') # 捕获子进程返回的输出并输出到控制台 child.logfile = sys.stdout.buffer # 捕获发送给子进程的命令并输出到控制台 child.logfile_send = sys.stdout.buffer child.sendline('ls') child.expect(shellprompt) # 若仍需单独提取命令输出,可继续使用child.before ls_out = child.before.decode()
说明:
logfile负责记录从子进程接收到的所有内容logfile_send负责记录你发送给子进程的所有内容- 使用
sys.stdout.buffer是因为pexpect的日志属性要求接收字节流对象,而非文本流
输出到文件
如果需要将内容保存到文件,只需将属性指向一个以二进制模式打开的文件对象即可:
#!/usr/bin/env python3 import pexpect shellprompt = "] # " # 以二进制模式打开日志文件 with open('ssh_interaction.log', 'wb') as log_file: child = pexpect.spawn('ssh admin@XYZ') child.logfile = log_file child.logfile_send = log_file child.sendline('ls') child.expect(shellprompt)
这样所有发送的命令和返回的输出都会被写入到指定文件中。
内容的提问来源于stack exchange,提问作者singleX
相关产品推荐
相关产品推荐

