我想通过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-windows。 python脚本似乎等待在plink命令窗口内完成某些操作。通过手动关闭窗口,可以获得所需的答案"显示在python里面。
我正在寻找一个命令/程序来直接从python中关闭plink。关闭子进程似乎不够,因为在这种情况下,只有python和plink之间的通信才会被关闭而不是程序plink.exe本身。
任何帮助表示赞赏! 问候,菲尔
答案 0 :(得分:2)
communicate()
函数的文档说:等待进程终止。因此在plink.exe退出之前函数不会返回,因此你的程序没有得到输出到那时。
您应该添加关闭telnet连接的'command'
内容。当远端关闭telnet连接时,plink.exe将退出,其窗口将关闭。如果您的telnet会话运行unix shell,您可以添加&#39 ;;出口'你的命令。
答案 1 :(得分:0)
您可以检查plink隧道中的任务是否已完成,然后执行 脚本中的taskkill
类似的东西,
killProg = taskkill /f /fi "imagename eq plink.exe"
p.communicate('killProg')[0]
这将在保持隧道打开以执行其他命令的同时终止plink。