【Python】进程管理之 pexpect
相对有名的可用于自动化应用程序交互的模块,可用于 ssh、ftp 等程序。 环境:Ubuntu 20.04 LTS 最近想做一个游戏服务器管理器,以 Python 为主语言,对 Linux 上的常驻程序进行管理。需要满足: 无阻塞启动程序 实时读取程序输出 实时进行程序输入 定时进行程序重启 等功能要求。 要求不是很多,也不是很复杂,但 Pexpect 完成得不是很好。 开始 child = pexpect.spawn('ssh uesr@IP') # 执行命令 child.expect('password:') # 期待程序输出 'password:' child.sendline(my_password) # 向程序输入 my_password spawn() pexpect.spawn(command, args=[], timeout=30, maxread=2000, searchwindowsize=None, logfile=None, cwd=None, env=None, ignore_sighup=False, echo=True, preexec_fn=None, encoding=None, codec_errors='strict', dimensions=None, use_poll=False) command # 推荐直接使用命令字符串 child = pexpect.spawn('ls -latr /tmp') # pexpect 不解释 shell 元字符,如重定向、管道或通配符(>,|,*),因此需要如下使用 child = pexpect.spawn('/bin/bash -c "ls -l | grep LOG > logs.txt"') timeout 默认 30s,超时则报错。 logfile wiki: 日志文件成员打开或关闭日志记录。所有输入和输出都将复制到给定的文件对象。将 logfile 设置为 None 以停止记录。这是默认设置。将日志文件设置为 sys.stdout 以将所有内容回显到标准输出。每次写入后都会刷新日志文件。 ...