ssh session作为python子进程获取输入但不将其打印到stdout

时间:2015-03-16 19:55:39

标签: python ssh subprocess popen

我正在尝试使用python的cmd库来创建一个包含有限命令的shell。我的一个要求是能够运行一个执行现有shell脚本的命令,该脚本在远程计算机上打开ssh会话,并允许用户与远程shell进行交互,就好像它是一个常规的ssh会话一样。

简单地使用subprocess.Popen('[/ path / to / connect.sh]')至少可以作为一个起点,除了一个问题。您可以与远程shell进行交互,但您键入的输入未显示在stdout上...例如,您在stdout上看到提示,但是当您键入“ls”时,您看不到它被键入但是当您点击时返回它按预期工作。

我正在尝试将输入打印到stdout,并将其发送到远程ssh会话。

编辑: 不使用cmd的实际代码只是一行:

ssh_session = subprocess.Popen(['connect.sh'])

它是从扩展cmd.Cmd的类中的do_ *方法触发的。我想我最终可能会使用paramiko,但仍会对任何人的意见感兴趣。

1 个答案:

答案 0 :(得分:0)

假设您使用的是类Unix系统,SSH会检测您是否在终端上。当它检测到您不在终端上时,例如使用子进程时,它不会回显键入的字符。相反,您可能想要使用伪终端,请参阅pexpectpty。通过这种方式,您可以从SSH获取输出,就像它在真正的终端上运行一样。