首页 > 解决方案 > 将命令传递给 PUTTY

问题描述

我使用以下代码打开 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'

标签: pythonpython-2.7subprocess

解决方案


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

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

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

另外,我相信两者都plink希望ssh-i小写)而不是-I(大写)作为指定密钥文件的选项。


推荐阅读