用Python关闭Plink窗口

用Python关闭Plink窗口,python,telnet,plink,Python,Telnet,Plink,我想通过Telnet与数据记录器通信。因此,我编写了以下python脚本: import subprocess command ='plink.exe -telnet -P 23 12.17.46.06' p = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE, bufsize=1, shell=False) answer = p.communicate('command')[0] print

我想通过Telnet与数据记录器通信。因此,我编写了以下python脚本:

import subprocess

command ='plink.exe -telnet -P 23 12.17.46.06'

p = subprocess.Popen(command, stdin=subprocess.PIPE, stdout=subprocess.PIPE, bufsize=1, shell=False)

answer =  p.communicate('command')[0]
print answer
通过运行脚本,弹出一个plink窗口。python脚本似乎在等待在plink命令窗口中执行某些操作。通过手动关闭窗口,所需的“答案”将显示在python中

我正在寻找一个直接从python关闭plink的命令/过程。仅仅关闭子进程似乎是不够的,因为在本例中,只有python和plink之间的通信被关闭,而不是程序plink.exe本身

感谢您的帮助! 关于,Phil,函数的文档中说:等待进程终止。因此,函数在plink.exe退出之前不会返回,因此您的程序在此之前不会获得输出

您应该在
“命令”
中添加将关闭telnet连接的内容。当远端关闭时,telnet连接plink.exe将退出,其窗口将关闭。如果您的telnet会话运行unix shell,则可以添加“;退出命令。

函数的文档说明:等待进程终止。因此,函数在plink.exe退出之前不会返回,因此您的程序在此之前不会获得输出


您应该在
“命令”
中添加将关闭telnet连接的内容。当远端关闭时,telnet连接plink.exe将退出,其窗口将关闭。如果您的telnet会话运行unix shell,则可以添加“;退出命令。

您可以检查plink隧道内的任务是否完成,然后执行 脚本中的taskkill

类似于,
killProg=
taskkill/f/fi“imagename eq plink.exe”

p、 通信('killProg')[0]


这将杀死plink,同时保持通道打开以执行其他命令。

您可以检查plink通道内的任务是否完成,然后执行 脚本中的taskkill

类似于,
killProg=
taskkill/f/fi“imagename eq plink.exe”

p、 通信('killProg')[0]


这将杀死plink,同时保持通道打开以执行其他命令。

感谢对communicate()命令的澄清。然而,问题仍然是如何直接从python中退出plink。python脚本在64位Windows 7上运行。当连接关闭时,plink将退出。你怎么知道什么时候杀了它?你可以打电话杀了它。当然,您的程序在被阻止等待进程终止时无法执行任何操作。您可能想学习多线程(如果没有bug,很难做到这一点),或者提供一个超时来通信(),或者使用非阻塞方法来管理管道?你关于暂停的建议对我来说已经足够了。但是,正如我前面提到的,我可以终止从python到plink的连接,但不能终止plink本身的telnet连接。当进程不存在时,其连接也不存在。Adding.kill()不会改变任何内容。Plink窗口保持打开状态。感谢您对communicate()-命令的说明。然而,问题仍然是如何直接从python中退出plink。python脚本在64位Windows 7上运行。当连接关闭时,plink将退出。你怎么知道什么时候杀了它?你可以打电话杀了它。当然,您的程序在被阻止等待进程终止时无法执行任何操作。您可能想学习多线程(如果没有bug,很难做到这一点),或者提供一个超时来通信(),或者使用非阻塞方法来管理管道?你关于暂停的建议对我来说已经足够了。但是,正如我前面提到的,我可以终止从python到plink的连接,但不能终止plink本身的telnet连接。当进程不存在时,其连接也不存在。Adding.kill()不会改变任何内容。Plink窗口保持打开状态。