2016-04-16 121 views
0

如果你把這個代碼的短位:爲什麼sshtunnel阻止SIGINT關閉我的python應用程序?

import sshtunnel 

# The IP of any system with an SSH server on port 22 
ip = "localhost" 

print "Connecting to ssh..." 
with sshtunnel.open_tunnel(ip, ssh_username="test", 
          ssh_password="test", 
          remote_bind_address=("1.2.3.4", 23)) as server: 

    print "SSH connected" 

print "SSH Closed" 

設置「IP」變量設置爲端口22上運行的SSH服務器的任何系統,運行代碼,並嘗試用Ctrl + C中斷它就在它打印出「Connecting to ssh ...」之後,它會給你回溯並凍結(不退出)。 什麼阻止它?

+0

如果我使用PyCharm運行上面的代碼,和一個KeyboardInterrupt後暫停(當它凍結在等待什麼),它似乎停止在這一行中packet.py: 'x = self .__ socket.recv(n)'。 packet.py似乎是一個paramiko模塊。這對任何人都有意義嗎?這是sshtunnel圖書館,還是paramiko應該處理得更好?或者我做錯了什麼? – Tal

+0

似乎與此相關:https://github.com/paramiko/paramiko/issues/520。我會盡力調查。 – Tal

回答

1

確實目前sshtunnel沒有考慮任何信號。 您可以通過運行解決方法:

server = sshtunnel.open_tunnel(ip, ssh_username="test", 
           ssh_password="test", 
           remote_bind_address=("1.2.3.4", 23)) 
try: 
    with server: 
     print "SSH connected" 
except KeyboardInterrupt: 
    print "Pressed Ctrl-C" 
    server._stop_transport() 

print "SSH Closed" 
相關問題