How to kill plink.exe when there's no output from stdout?
本问题已经有最佳答案,请猛点这里访问。
进程完成后,Plink.exe不会关闭。 当试图通过检查输出==''来打破while循环时代码被卡住了:中断,但仍然没有运气。 我能够打印实时输出,但在完成后无法打破循环。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | #Establish ssh connection to a server def _establish_connection(self): connection='plink -ssh {}@{} -pw {}'.format(self.user,self.server,self.pw) self.sp = Popen(connection,stdin=PIPE,stdout=PIPE) #Trying to read live output from stdout and write to file def _test_create_log(self,_system,_logdir): self._establish_connection() self.sp.stdin.write(_command) timestr = time.strftime("%Y%m%d-%H%M%S") dir_to_log = os.path.join(_logdir,_system + '_' + timestr + '.txt') with open(dir_to_log,'w+') as myLog: while True: output = self.sp.stdout.readline() output.decode('ASCII') if output != '': myLog.write(output) print(output.strip()) else: #Code does not reach here, plink not killed. self.sp.kill() break |
Shell是一个带输入和输出的黑盒子。 无法检测到某个特定命令的输出已结束。 你所能做的就是在输出的末尾添加一些魔术字符串并寻找它。 无论如何,这不是正确的解决方案。
如果要使用命令关闭Plink,请在Plink命令行上提供命令,如:
1 | connection='plink -ssh {}@{} -pw {} {}'.format(self.user,self.server,self.pw,_command) |
虽然更好的方法是在Python中使用本机SSH库,如Paramiko,而不是驱动外部控制台应用程序。
请参阅python paramiko run命令。