pexpect模块用于自动化交互式命令行程序,其核心是expect机制,通过等待特定输出并发送响应实现控制,常用于自动登录、文件传输等场景,支持spawn启动进程、expect等待提示、sendline输入内容及interact交还控制权,主要适用于Unix/Linux系统,Windows需借助扩展,使用时需注意明文密码安全问题。
Python的pexpect模块是一个用于启动并控制子进程的工具,特别适合与需要交互的命令行程序进行自动化交互。它通过模拟用户输入(比如键入密码、选择菜单项等)来实现对命令行应用的自动操作。
核心功能:基于期望的输入输出控制
pexpect的核心是“期望”(expect)机制。你告诉程序等待某个特定的输出(比如提示符或字符串),然后做出相应动作(如发送输入)。这个过程类似于你在终端中看到提示后敲入内容。
常见使用场景包括:
- 自动登录远程服务器(配合ssh)
- 自动化FTP或SCP文件传输
- 处理需要输入密码的命令(如sudo、git)
- 测试命令行工具的行为
基本用法
示例
下面是一个简单的例子,展示如何用pexpect运行ssh命令并自动输入密码:
import pexpectchild = pexpect.spawn('ssh user@hostname') child.expect('password:') # 等待密码提示 child.sendline('your_password') # 发送密码 child.interact() # 将控制权交给用户
spawn 启动一个子进程;expect 等待指定的输出;sendline 模拟键盘输入并回车;interact 允许用户接管会话。
适用平台与限制
pexpect主要在Unix/Linux系统上工作良好,依赖于pty(伪终端)机制。Windows支持有限,但有第三方扩展如pexpect-u或使用wexpect可提供类似功能。
需要注意的是,由于涉及明文密码处理,使用时应确保脚本权限安全,避免泄露敏感信息。
基本上就这些。pexpect不是万能的,但对于简单交互任务来说,非常直接有效。

示例






