将命令传递给PUTTY

时间:2018-05-01 10:07:43

标签: python python-2.7 subprocess

我使用以下代码打开putty终端并传递命令。终端打开很好,但没有任何反应。脚本停止直到我关闭终端。什么可能导致这里的问题?

import subprocess, time
test=subprocess.Popen('"C:\Program Files (x86)\PuTTY\putty.exe" -ssh -X -I
        p:\.ssh\id_dsa.ppk my_name@my_host', 
        stdin=subprocess.PIPE,
        stdout=subprocess.PIPE)
test.stdin.write("ls\n")
test.stdin.flush()
test.stdin.close()
stdout_value = test.stdout.read()
print repr(stdout_value)
print 'done'

1 个答案:

答案 0 :(得分:2)

putty.exe不从标准输入读取,也不写入标准输出。它是终端仿真器,因此它从键盘输入并写入其应用程序窗口。

如果要通过标准输入和输出描述符将数据传递到ssh连接,请使用PuTTY包附带的plink.exe程序。 (它将与putty.exe位于同一目录中。)它不是终端模拟器,它只是建立一个ssh连接然后驱动stdin和stdout,类似于传统的ssh命令类Unix系统。

您甚至可以运行ssh而不是plink,具体取决于您拥有的Windows版本以及已安装的额外软件包。

此外,我认为plinkssh都需要-i(小写),而不是-I(大写)作为指定密钥文件的选项。< / p>