如何使用python 2.7模块远程执行tcl命令[使用tclsh提示符]?

时间:2019-06-10 03:07:23

标签: python-2.7 tcl paramiko tclsh

这是我的设置。 正在运行Python 2.7代码的Windows PC1 ---->已安装tcl的Windows PC2。

Windows PC1和Windows PC2通过LAN连接并且可以互相访问。

现在,我想使用python从PC1打开PC2的CMD行(作为管理员),并执行Windows命令。 是的,可以通过paramiko来实现。

现在,我想在PC2命令提示符中运行“ tclsh”命令。之后,命令行进入tcl提示符[%]。在这里,我可以执行puts“ Welcome”之类的tcl命令。因此,如果我尝试通过paramiko执行“ tclsh”命令,由于提示符已从Windows提示符更改为%,它处于等待状态。

我的意图是通过python [PC1]在tclsh提示符[PC2 cmd行]中运行tcl命令。

示例:从PC1我想通过python2.7执行“ puts“ Hello”到PC2 tcl提示符。

请给我一些想法,可以用[python模块或任何其他方法]通过python 2.7访问tclsh提示。

通过paramiko正常的Windows命令可以按预期运行,但是tclsh输入%提示符,因此paramiko在这种情况下不起作用。

我想通过python 2.7远程访问tcl提示符。

我想通过python在远程系统的tclsh提示符内执行tcl命令。这是我尝试过的小程序。

host = '192.168.1.4'
user = 'lenovo'
passw = 'XXX'

ssh = paramiko.SSHClient()
ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
ssh.connect(hostname=host, username=user, password=passw)
stdin, stdout, stderr = ssh.exec_command('tclsh')
print (str('.'.join(stdout.readlines())))
print (str('.'.join(stdin.readlines())))
print (str('.'.join(stderr.readlines())))

但是当tclsh进入新的%提示符时,我没有看到任何输出。我该如何解决?访问tclsh%提示符后,我要执行“ 输入“欢迎” ” 如果没有给出“主机名” Windows命令,我会得到回复。

1 个答案:

答案 0 :(得分:0)

我得到了使用python 2.7中的pramiko访问远程Windows pc的tclsh提示符的解决方案。

第1步:第一次对tclsh命令使用invoke shell方法,并将invoke_shell的返回值存储到globa变量中。假设返回值为x。

Step2:现在,对于tclsh提示符的任何其他命令[例如cmd =放置“堆栈”]都可以使用x.send(cmd +“ \ n”)

Step3:现在,我们可以获得x.recv(9999)之类的输出缓冲区

注意[仅用于Windows]:x.recv(9999)返回带有许多转义序列的实际输出。我们需要清理它以获取实际数据。