当前位置:  开发笔记 > 编程语言 > 正文

在Paramiko中运行交互式命令

如何解决《在Paramiko中运行交互式命令》经验,为你挑选了3个好方法。

我正试图通过paramiko运行一个交互式命令.cmd执行尝试提示输入密码但我不知道如何通过paramiko的exec_command提供密码并且执行挂起.如果cmd执行需要交互式输入,有没有办法将值发送到终端?

ssh = paramiko.SSHClient()
ssh.connect(server, username=username, password=password)
ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command("psql -U factory -d factory -f /tmp/data.sql")

有谁知道如何解决这个问题?谢谢.



1> James Brady..:

完整的paramiko发行版附带了很多很好的演示.

在demos子目录中,demo.pyinteractive.py有完整的交互式TTY示例,这可能对您的情况有点过分.

在上面的示例中,ssh_stdin行为类似于标准的Python文件对象,ssh_stdin.write因此只要通道仍处于打开状态,它就应该工作.

我从来不需要写入stdin,但是文档建议一旦命令退出就关闭一个通道,所以使用标准stdin.write方法发送密码可能不起作用.通道本身有较低级别的paramiko命令,可以为您提供更多控制 - 请参阅如何SSHClient.exec_command为所有血腥细节实施该方法.


修复断开的链接。
并且,对于那些想要只看到命令输出可能是什么的人,一些代码可能是:`(stdin,stdout,stderr)= Client.exec_command('ls -la')print("\nstdout是:\n"+ stdout.read()+"\nstderr is:\n"+ stderr.read())`

2> afrosteve..:

尝试使用ssh(Paramiko的一个分支)进行交互式ssh会话时遇到了同样的问题.

我挖了一遍,找到了这篇文章:

http://jessenoller.com/2009/02/05/ssh-programming-with-paramiko-completely-different/

要继续你的榜样,你可以做到

ssh_stdin, ssh_stdout, ssh_stderr = ssh.exec_command("psql -U factory -d factory -f /tmp/data.sql")
ssh_stdin.write('password\n')
ssh_stdin.flush()
output = ssh_stdout.read()

本文更深入,描述了exec_command周围的完全交互式shell.我发现这比源代码中的示例更容易使用.


链接坏了:(

3> 小智..:

您需要Pexpect才能兼得两者(expect和ssh包装器)。

推荐阅读
kikokikolove
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有