【发布时间】:2014-01-29 14:15:40
【问题描述】:
我正在尝试使用子进程生成一个 ssh 子进程。
我正在 Windows 7 上开发 Python 2.7.6
这是我的代码:
from subprocess import *
r=Popen("ssh sshserver@localhost", stdout=PIPE)
stdout, stderr=r.communicate()
print(stdout)
print(stderr)
输出:
None
stdout 应包含: sshserver@localhost 的密码:
【问题讨论】:
-
至少在 Linux(和可能的窗口)上,您的 tty 的
stdin与 ssh 要求输入密码的不同。等一下,得到了这个的代码(linux tho)。 -
如果您需要自动化
ssh,您可能需要调查pexpect 或类似的东西。您可能还想考虑只使用基于密钥的身份验证,这样您就不需要搞砸密码了。 -
我已经在 pexpect 上工作过,但它不能在 Windows 上完美运行,这就是为什么我想使用标准 python 模块@larsks
-
@user3249194 您不能为此使用标准模块。 Windows 不允许您连接到子进程 ID。我读过有人在摆弄
win32库,但他设法更改了主循环的进程权限,以便附加到子进程 ID 并读取标准输出。但简而言之,这是不可能的。我已经在下面发布了所有已知有效的 3 个选项。第一个是 Linux 解决方案,所以你可能对此不感兴趣,除非你想掌握生活并使用合适的操作系统,呵呵 :) -
@Torxed 我已经安装了 debian 并使用了 pexpect,但我想为 windows 找到一个解决方案:D
标签: python subprocess popen