python - 将命令传递给 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'
解决方案
putty.exe
不从标准输入读取,也不写入标准输出。它是一个终端仿真器,因此它从键盘获取输入并写入其应用程序窗口。
如果您想通过标准输入和输出描述符将数据传递到 ssh 连接中,请使用plink.exe
PuTTY 包附带的程序。(它将与 . 位于同一目录中putty.exe
。)它不是终端模拟器,它只是建立一个 ssh 连接,然后驱动标准输入和标准输出,类似于ssh
类 Unix 系统上的传统命令。
您甚至可以运行ssh
而不是运行plink
,这取决于您拥有的 Windows 版本以及您安装的额外软件包。
另外,我相信两者都plink
希望ssh
(-i
小写)而不是-I
(大写)作为指定密钥文件的选项。