如何在 Python 上使用 TFTPy 停止 TFTP 服务器
How to stop TFTP server using TFTPy on Python
我需要在 Python 上使用 TFTP 服务器,我尝试为此使用 TFTPy 模块。服务器运行完美,但我不能如愿以偿。
Python v3.7,TFTPy v 0.8.0,Windows 10x64。我尝试编写简单的代码并使用线程,但没有任何改变。
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)
使用线程更复杂:
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()
服务器不要如我所愿的停止。它开始并继续无限制地工作,我也尝试使用 'server timeout'(例如 self.server.listen(tftp_ip_addr, 69,1)),但它也不起作用。
这段代码满足了我的所有需求:
导入线程
导入 tftpy
从日期时间导入日期时间
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()
我需要在 Python 上使用 TFTP 服务器,我尝试为此使用 TFTPy 模块。服务器运行完美,但我不能如愿以偿。
Python v3.7,TFTPy v 0.8.0,Windows 10x64。我尝试编写简单的代码并使用线程,但没有任何改变。
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)
使用线程更复杂:
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()
服务器不要如我所愿的停止。它开始并继续无限制地工作,我也尝试使用 'server timeout'(例如 self.server.listen(tftp_ip_addr, 69,1)),但它也不起作用。
这段代码满足了我的所有需求: 导入线程 导入 tftpy 从日期时间导入日期时间
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()