繁体   English   中英

ssh会话作为python子进程接受输入,但不将其打印到stdout

[英]ssh session as python subprocess takes input but does not print it to stdout

我正在尝试使用python的cmd库创建具有有限命令的外壳。 我的一个要求是能够运行一个命令,该命令执行一个现有的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,但仍会对任何人对此的投入感兴趣。

假设您使用的是类似Unix的系统,SSH会检测您是否在终端上。 当它检测到您不在终端上时(如使用子进程时),它将不会回显键入的字符。 相反,您可能想使用伪终端,请参阅pexpectpty 这样,您可以从SSH获得输出,就好像它在真实终端上运行一样。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM