首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在Python上使用TFTPy停止TFTP服务器

如何在Python上使用TFTPy停止TFTP服务器
EN

Stack Overflow用户
提问于 2019-07-19 17:58:25
回答 1查看 988关注 0票数 1

我需要在Python上使用TFTP服务器,我尝试使用TFTPy模块。服务器运行得很好,但我不能像我希望的那样在瞬间停止它。

PythonV3.7,TFTPy v0.8.0,Windows10x64。我试着写简单的代码并使用线程,但是什么都没有改变。

代码语言:javascript
复制
import tftpy
import time
server = tftpy.TftpServer('C:/Users/MyUSER/Downloads/FTPS/')
server.listen('127.0.0.1', 69)
time.sleep(5)
server.stop(True)

更复杂的使用线程:

代码语言:javascript
复制
import tftpy
import threading
import time
from datetime import datetime


tftp_ip_addr = '127.0.0.1'
tftp_folder = 'C:/Users/MyUSER/Downloads/FTPS/'


class PyTFTPServer(object):
    def __init__(self, tftp_ip_addr, tftp_folder):
        self.tftp_ip_addr = tftp_ip_addr
        self.tftp_folder = tftp_folder
        self.server = tftpy.TftpServer(tftp_folder)
        self.server.shutdown_gracefully = False

    def start_tftp_server(self):
        thr = threading.Thread(name="TFTP-Server Thread", target=self.server.listen(tftp_ip_addr, 69))
        thr.daemon = True
        thr.start()
        now_time = datetime.now()
        print(now_time.strftime("%d.%m.%Y %H:%M:%S") + ' TFTP Server: TFTP Server started')

    def stop_tftp_server(self):
        self.server.stop(True)

tftp_server = PyTFTPServer(tftp_ip_addr, tftp_folder)
tftp_server.start_tftp_server()
time.sleep(8)
tftp_server.stop_tftp_server()

服务器不会像我希望的那样停止。它开始和继续工作没有任何限制,我也尝试使用‘服务器超时’(例如self.server.listen(tftp_ip_addr,69,1)),但它也不工作。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-07-26 17:10:16

这段代码完成了我所需要的一切:导入线程导入tftpy from datetime导入datetime

代码语言:javascript
复制
def get_current_time():
    now_time = datetime.now()
    return now_time.strftime("%d.%m.%Y %H:%M:%S")


class PYTFTPServer(object):
    def __init__(self, tftp_ip_addr, tftp_folder, tftp_log_level):
        self.tftp_ip_addr = tftp_ip_addr
        self.tftp_folder = tftp_folder
        self.tftp_server = tftpy.TftpServer(self.tftp_folder)
        self.tftp_log_level = tftp_log_level

    def start_tftp_server(self):
        try:
            print(get_current_time() + ' TFTP Server: TFTP Server starting')
            self.tftp_server.listen(self.tftp_ip_addr, 69)
        except KeyboardInterrupt:
            pass

    def stop_tftp_server(self):
        self.tftp_server.stop()              # Do not take any new transfers, but complete the existing ones.
        print(get_current_time() + ' TFTP Server: TFTP Server stoped')
        # self.server.stop(True)            # Drop all connections and stop the server. Can be used if needed.


def start_tftp_process(tftp_ip_addr, tftp_folder, tftp_log_level):
    global tftpsrv, TFTP_srv_thread
    tftpsrv = PYTFTPServer(tftp_ip_addr, tftp_folder, tftp_log_level)
    TFTP_srv_thread = threading.Thread(name="TFTP Server thread", target=tftpsrv.start_tftp_server)
    TFTP_srv_thread.start()


def stop_tftp_process():
    tftpsrv.stop_tftp_server()
    TFTP_srv_thread.join()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/57109992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档