2011-06-09 133 views
0

我需要創建一個ssh隧道,然後執行某些操作,然後撕下隧道。如何關閉通過python打開Popen的ssh隧道

我一直在試圖做這樣的:

def runCmd(self,cmd): 
    args = shlex.split(cmd) 
    return subprocess.Popen(args) 

def openTunnel 
    cmd = 'ssh -f -N -L 1313:localhost:1313 [email protected]' 
    self.TunnelObj = self.runCmd(cmd) 

這造成我的隧道。 我可以做我需要做的事情。現在我想拆掉隧道。

def closeSocket(self): 
     print '\nClosing Tunnel\n' 
     if self.TunnelObj.returncode == None: 
      print '\nabout to kill\n' 
      self.TunnelObj.kill() 

但隧道仍然開着。 ssh會話仍然存在,並且該端口仍被分配。

如何關閉此通道?

回答

1

部分問題是隧道進程是self.TunnelObj的子進程。您可以嘗試省略-f標誌,以便直接保持隧道進程。

另一種選擇是查看paramiko庫和this問題。

+0

這正是我的問題。 -f(將隧道發送到後臺)使python不能殺死進程。 – 2011-06-10 11:42:36