python 命令pexpect发送命令错乱

求教使用 pexpect 结果的情况如下,不知道是什么原因:

你用SSH协议不是可以用***登录吗

那么在 python 命令中如何实现呢?我试过 paramiko 模块但不太方便,而且在传输大量文件时中间掛起。

你最终想实现什么目的呢

最终就是要实现能够定时使用 ssh 从远端取得文件比如日志,每小时或每天但是需要使用 python。


最后使用一个 expect(pexect.EOF)而不是使用 interact()。不过这里有一个超时的问题超时后会抛出异常并终止。

这篇文章介绍了Python中的pexpect模块基于該模块可以做ssh、ftp等的自动化链接。

基于pexpect我们构建了pxssh类使用pxssh模块,很容易通过ssh连接到其他服务器

本文基于此处的官方文档:

打开终端并輸入以下命令以获取有关该模块的帮助。

 
你也可以在这里看到帮助 

Pxssh添加了登录、注销和等待shell提示的方法

它做了各种棘手的事情以便在SSH登錄过程中处理许多情况。

例如如果会话是您的第一次登录,则pxssh会自动接受远程***;或者如果你有公钥认证设置那么pxssh将不会等待密码提礻。

为了使其更加健壮它将shell提示设置为比$或#更独特的东西。这适用于大多数Borne / Bash或Csh样式的shell

此示例在远程服务器上运行一些命令并打印结果。

首先我们导入我们需要的模块。 (pxssh和getpass)

我们导入getpass模块它会提示用户输入密码,而不会回显他们键入控制台的内容


 

在远程SSH服务器仩运行命令

让我们再举一个例子。要运行命令('uptime')并打印输出您需要执行以下操作:


 
想要了解pxssh的更多信息, 请阅读官方

pexpect有两个类或方法用得比较多一個是' # 利用 ftp 命令作为 spawn 类构造函数的参数,生成一个 spawn 类的对象 # 期待'login'字符串出现从而接下来可以输入用户名 # 匹配'login'字符串成功,输入用户名. # 匹配提示符成功输入执行命令 'ls -l' # 立马匹配 'ls -l',目的是为了清除刚刚被 echo 回显的命令. # 将 telnet 子程序的执行权交给用户.

参考资料

 

随机推荐