2014-10-28 88 views
2

我剛剛開始使用pyftpdlib。我想先做的是拿着示例服務器並將其包裝在一個線程中。但如果我運行這個腳本就不會退出:如何停止pyftpdlib FTP服務器?

from pyftpdlib.authorizers import DummyAuthorizer 
from pyftpdlib.handlers import FTPHandler 
from pyftpdlib.servers import FTPServer 
import logging 

import threading 

class FtpThread(threading.Thread): 
    def __init__(self, user_list): 
    self.user_list = user_list 
    self.killswitch = 0 
    threading.Thread.__init__(self) 
    def run(self,*args,**kwargs): 
    authorizer = DummyAuthorizer() 
    authorizer.add_user('user', 'bla', '/home/user/git/verteilerCore2/default_basedir/in/1/', perm='elradfmwM') 
    handler = FTPHandler 
    handler.authorizer = authorizer 

    logging.basicConfig(filename='/var/log/verteiler_ftp.log', level=logging.INFO) 
    handler.banner = "pyftpdlib based ftpd ready." 
    address = ('', 21) 
    self.server = FTPServer(address, handler) 
    self.server.max_cons = 256 
    self.server.max_cons_per_ip = 5 
    self.server.serve_forever() 

    def stop(self): 
    self.server.close_all() 

def main(): 
    ftp_server = FtpThread("") 
    ftp_server.start() 
    import time 
    time.sleep(1) 
    ftp_server.stop() 

if __name__ == '__main__': 
    main() 

我需要做些什麼才能使server_forever停止?呼喚「close_all」從服務停止服務器,但整個腳本不會退出:(

+0

「停止服務器服務」 - 這是否意味着它不會接受任何進一步的請求? – User 2014-10-28 06:44:12

+0

是的。我無法連接,但線程不會退出 – JasonTS 2014-10-28 23:14:00

回答

0

嘗試在Windows 8和它退出乾淨:

[I 14-10-28 11:49:18] >>> starting FTP server on :::21, pid=1892 <<< 
[I 14-10-28 11:49:18] poller: <class 'pyftpdlib.ioloop.Select'> 
[I 14-10-28 11:49:18] masquerade (NAT) address: None 
[I 14-10-28 11:49:18] passive ports: None 
[I 14-10-28 11:49:19] >>> shutting down FTP server (0 active fds) <<< 

你能提供有關設置的詳情?

+0

我運行的是debian 7,python 2.7和current版本的pyftpdlib。感謝您的幫助。 – JasonTS 2014-10-28 23:15:18

+0

我試過在Ubuntu上,它確實卡住了,我已經深入瞭解了我n pyftpdlib的源代碼,並有一個測試,實現你所需要的東西,不會卡住https://code.google.com/p/pyftpdlib/source/browse/trunk/test/test_ftpd.py(#240行) – 2014-10-29 07:39:41

+0

我以前看過這些測試類,但我無法弄清楚爲什麼我的代碼不能工作。我寧願找到問題,而不是複製這麼多的代碼。謝謝 – JasonTS 2014-10-29 10:03:10