pip install pywin32
pip install pyftpdlib
replace the path "C:\..wathever...\ftp-public" on ftp.py
python service.py install
python service.py start
python service.py debug
python service.py stop
python service.py remove
from pyftpdlib.handlers import FTPHandler | |
from pyftpdlib.servers import ThreadedFTPServer | |
from pyftpdlib.authorizers import DummyAuthorizer | |
class FtpServer: | |
def start(self): | |
authorizer = DummyAuthorizer() | |
authorizer.add_user('user', '12345', 'C:\\..wathever...\\ftp-public', perm='elradfmwMT') | |
handler = FTPHandler | |
handler.authorizer = authorizer | |
self.server = ThreadedFTPServer(('', 2121), handler) | |
self.server.serve_forever() | |
def stop(self): | |
self.server.close_all() |
import socket | |
import win32serviceutil | |
import servicemanager | |
import win32event | |
import win32service | |
import ftp | |
class SMWinservice(win32serviceutil.ServiceFramework): | |
_svc_name_ = '_pythonFTPService_' | |
_svc_display_name_ = '_pythonFTPService_' | |
_svc_description_ = '_pythonFTPService_ description' | |
@classmethod | |
def parse_command_line(cls): | |
win32serviceutil.HandleCommandLine(cls) | |
def __init__(self, args): | |
win32serviceutil.ServiceFramework.__init__(self, args) | |
self.hWaitStop = win32event.CreateEvent(None, 0, 0, None) | |
socket.setdefaulttimeout(60) | |
def SvcStop(self): | |
self.stop() | |
self.ReportServiceStatus(win32service.SERVICE_STOP_PENDING) | |
win32event.SetEvent(self.hWaitStop) | |
def SvcDoRun(self): | |
self.start() | |
servicemanager.LogMsg(servicemanager.EVENTLOG_INFORMATION_TYPE, | |
servicemanager.PYS_SERVICE_STARTED, | |
(self._svc_name_, '')) | |
self.main() | |
def start(self): | |
self.myFtpServer = ftp.FtpServer() | |
pass | |
def stop(self): | |
self.myFtpServer.stop() | |
pass | |
def main(self): | |
# BLL | |
self.myFtpServer.start() | |
pass | |
if __name__ == '__main__': | |
SMWinservice.parse_command_line() |