Python3命令行交互中Pexpect库使用之如何在指定目录下使用spawn执行命令

Pexpect介绍

因为要通过python执行脚本,而且有交互,需要输入密码才可以继续进行,就找到了Pexpect,Pexpect makes Python a better tool for controlling other applications.

想使用pexpect.expect功能

问题

之前我找了半天,通过spawn执行命令,都是因为不在对应目录下,最后发现spawn也支持cwd参数,就用上了,问题解决了

安装

既然知道这个库,安装应该都不是问题,就是使用pip即可,现在版本已经更新到4.8

pip3 install pexpect

使用

以实例来说一下使用知识,具体可以查阅相关资料

 import pexpect
 child = pexpect.spawn("sh ./code.sh", logfile=sys.stdout.buffer,cwd="/Users/guozhonghui/Downloads/Tag_Generator/")
 child.expect("Password:")
 child.sendline("gzh1818")
 child.expect("images")

spawn

spawn() 方法用来执行一个程序,它返回这个程序的操作句柄,以后可以通过操作这个句柄来对这个程序进行操作,很强大。

  • timeout指定交互是等待的超时值;
  • maxread设置read buffer大小. 每次pexpect尝试从TTY(Teletype终端)从读取的最大字节数;
  • searchwindowsize 指定了从输入缓冲区中进行模式匹配的位置,默认从开始匹配;
  • logfile 参数指定日志的记录位置,设置sys.stdout.buffer,可以将结果打印到控制台。
  • cmd指定命令执行的目录,默认值: None 或者说 ./,cwd 用来指定命令发送的命令在哪个路径下执行,它一般是用在 send() 系列命令中,比如在 Linux 中,你想在 /etc 目录下执行 ls –l 命令,那么完全不需要用 sendline(“cd /etc && ls -l”) 这样的方式,而是用 sendline(“ls –l”, cwd="/etc") 就可以了。

expect

检测交互过程的输出并进行相应的输入。如下文就是检测是否输出Password,

child.expect("Password:")
child.sendline("188888")

然后sendline就是输入字符串到应用中,如输出结果就是:

Password:188888

其他

官方文档:官方文档
参考使用说明:模块说明
有问题可私信

发布了33 篇原创文章 · 获赞 12 · 访问量 7万+

猜你喜欢

转载自blog.csdn.net/gzh8579/article/details/104070368
今日推荐