如何将日志记录添加到带有时间戳的文件到 Raspberry Pi 的 Python TCP 服务器

2024-02-29

我的项目有点陷入困境,我迫切需要帮助。我需要一个简单的 TCP 服务器 python 代码,它具有日志记录和时间戳等功能,我可以将其用于我的 Raspberry Pi。这是我的最后一年项目。

我看过一些例子,但由于我在编写自己的脚本/代码方面没有太多经验,所以我不太确定如何去做。如果有人能够通过解释和一些示例(如果可能的话)指导我正确的方向,我将不胜感激。

我正在使用 HERCULES SETUP UTILITY ,它充当我的 TCP 客户端,而我的 Visual Studio Python 代码充当服务器。我的服务器现在可以接收客户端发送的数据,我只是似乎无法添加可以将发送的数据保存到文本文件中的日志文件。有人可以给我看一些示例或参考吗?你的帮助意义重大。到目前为止,这是我的代码:

from socket import *
import thread

BUFF = 1024 # buffer size
HOST = '172.16.166.206'# IP address of host
PORT = 1234 # Port number for client & server to recieve data
def response(key):
    return 'Sent by client'

def handler(clientsock,addr):
    while 1:
        data = clientsock.recv(BUFF) # receive data(buffer).
        print 'data:' + repr(data)   #Server to recieve data sent by client.
        if not data: break           #If connection is closed by client, server will        break and stop recieving data.
        print 'sent:' + repr(response('')) # respond by saying "Sent By Client". 



if __name__=='__main__':
    ADDR = (HOST, PORT) #Define Addr
    serversock = socket(AF_INET, SOCK_STREAM) 
    serversock.bind(ADDR) #Binds the ServerSocket to a specific address (IP address and     port number)
    serversock.listen(0)
    while 1:
        print 'waiting for connection...'
        clientsock, addr = serversock.accept()
        print '...connected from:', addr #show its connected to which addr
        thread.start_new_thread(handler, (clientsock, addr ))

要将日志记录添加到带有时间戳的文件中,您可以使用logging module:

import logging

logging.basicConfig(level=logging.INFO, 
                    filename='myserver.log', # log to this file
                    format='%(asctime)s %(message)s') # include timestamp
logging.info("some message")

如果你运行代码;你应该看到myserver.log(+/- 您的时区和当前时间):

2013-12-24 09:20:17,739 some message

这是 TCP 服务器的完整示例,它将从客户端接收的每个行添加到前面:"Sent by Client: "短语并将其发回:

#!/usr/bin/env python
import logging
import sys
from SocketServer import ThreadingTCPServer, StreamRequestHandler

info = logging.getLogger(__name__).info

class EchoLineHandler(StreamRequestHandler):
    def handle(self):
        info("handling request from %s", self.client_address)
        # prepend each line (b'\n') and send it back
        for line in self.rfile:
            self.wfile.write(b"Sent by Client: ") # assume ascii-based encoding
            self.wfile.write(line)
        info("done %s", self.client_address)

def test(ServerClass=ThreadingTCPServer, HandlerClass=EchoLineHandler):
    # configure logging
    logging.basicConfig(level=logging.INFO,
                        filename='server.log', # log to this file
                        format='%(asctime)s %(message)s') # include timestamp

    # parse command line arguments
    host, port = 'localhost', 8826
    if len(sys.argv) > 1:
        host_, separator, port_ = sys.argv[1].rpartition(":")
        port = int(port_)
        if separator: # if ":" in sys.argv[1]
            host = host_ # accept any host, including empty

    # listen for connections
    server = ServerClass((host, port), HandlerClass)
    info("Serving on %s port %s", *server.server_address)
    try:
        server.serve_forever()
    finally:
        info("quit.")

if __name__=="__main__":
    test()

如果代码保存在则运行服务器echo_line_server.py:

$ python -mecho_line_server localhost:8826 & tail -F server.log
2013-12-24 17:09:38,089 Serving on 127.0.0.1 port 8826

运行客户端:

$ echo abc | nc localhost 8826
Sent by Client: abc
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何将日志记录添加到带有时间戳的文件到 Raspberry Pi 的 Python TCP 服务器 的相关文章

随机推荐

  • ExtJS 中自动调整文本字段标签大小

    在 ExtJS 中 是否可以将文本字段的标签调整为最佳大小以使其文本适合一行 The labelWidth http docs sencha com extjs 4 1 1 api Ext form Labelable cfg labelW
  • 按字母顺序搜索名称的查询

    我已经用过LIKE条件 但它要求我将全名输入数据库才能找到名称 if searchby equals Name try Class forName sun jdbc odbc JdbcOdbcDriver System out printl
  • 即使忘记了“new”,我什么时候应该自动创建一个对象?

    假设我有以下对象构造函数 function Foo bar this bar bar 如果我在全局范围内运行该函数而不使用new关键字然后bar将被设置在任何范围内Foo 被称为 var foo Foo 42 console log bar
  • 为什么C风格的注释会让insert语句运行两次?

    长话短说 我开始遇到 ORA 00001 主键违规 我追踪到这个问题 因为我的一些INSERT INTO语句运行了两次 然后我发现有问题的命令之后有一个 C 风格的注释 WHENEVER SQLERROR EXIT FAILURE SET
  • 有没有办法像 withCString 一样链接函数?

    有没有办法链接像这样的函数withCString 我的意思是任何 函数看起来像f Foo gt CFoo gt IO a gt IO a 例如 假设有一个函数cFunc CString gt CFoo gt CBar gt IO 通常 我会
  • 用于确保 shell 脚本在任何给定时间仅运行一个实例的 Shell 片段 [重复]

    这个问题在这里已经有答案了 可能的重复 确保一次只运行一个 shell 脚本实例的快速而肮脏的方法 https stackoverflow com questions 185451 quick and dirty way to ensure
  • 每秒写入文件数

    我想将访问率较高的网站的访问记录下来并存档 每秒可以对日志文件执行多少写入 如果您无法使用 Analytics 为什么不使用网络服务器现有的日志系统呢 如果您使用的是真正的网络服务器 那么它几乎肯定是一种已经针对最大吞吐量进行了优化的日志记
  • CollisionBitMask 如何工作? Swift/SpriteKit

    据我所知 物理体的默认设置是当它们相互碰撞时会相互弹开 直到您将它们的碰撞位掩码设置为相同的数字 然而 由于我相信碰撞位掩码 我在完成看起来应该非常简单的事情时遇到了一个巨大的问题 let RedBallCategory UInt32 0x
  • 订阅主题的 Angular HTTP 调用关闭主题

    我有两个可以获取给定对象的服务 用于获取完整列表的初始 HTTP 调用 以及用于实时更新新元素的 Websocket 通知 我想将这两个调用连接到同一个可观察对象 以便显示页面不了解后端 有这样的电话 private getInitialD
  • UIWebView:禁用富文本编辑器的复制/剪切选项

    我有一个带有 contentEditable div 的 UIWebView 来实现某种富文本编辑器 一旦用户选择任何文本片段 我需要修剪 UIMenuController 中出现在 Web 视图中的复制和剪切选项 网络上似乎有很多解决方案
  • hive 0.14 更新和删除查询配置错误

    在阿帕奇中hive 0 14我们可以通过支持更新和删除查询ACID配置 hive configuration hive support concurrency true hive enforce bucketing true hive ex
  • 在Qt中获取本地IP地址

    有没有跨平台的方法来获取本地IP地址 即看起来像192 168 1 49 使用Qt的计算机 我想为 Symbian 手机创建一个 FTP 服务器 并且想显示 FTP 客户端应连接的 IP 地址 Use QNetworkInterface a
  • 如何追加多个文本文件并将每个文件名放入 pandas 的新列中?

    我有很多 txt文件夹中的文件 每个文件具有相同的结构 每个文件中的四列相同 但行数不同 1 txt 0 00781238 0 00082577 0 00781238 0 03314453 0 01562476 0 00064219 0 0
  • opencv - 使用特征检测进行对象跟踪

    我想跟踪视频中的一个对象 例如 移动的球 参考opencv教程 Features2D Homography来查找已知对象 我已经能够通过提供参考图像来跟踪静态图像中的对象 我计划使用参考图像从输入视频的第一帧中检测移动物体 对于下一帧 在前
  • SQL 约束检查值是否不存在于另一个表中

    在我的 PostgreSQL 中9 4数据库 我有一个表fields有一个柱子name具有独特的价值观 我正在创建一个新表fields new具有类似的结构 这里不重要 和一个列name以及 我需要一种方法来约束name要插入的值field
  • 如何打开 SwiftUI 应用程序并使用 Siri Intent Extension 中的 NSUseractivity 执行功能?

    我的问题 我的应用程序有自己的使用意图扩展创建的快捷方式操作 他们完美地执行后台操作 对于某些操作 我试图使意图扩展在快捷方式中运行时打开主 容器 应用程序并执行功能 我在使用 NSUserActivity 时遇到了麻烦 我不确定它是一个
  • 用Java编写多线程映射迭代器

    我有一个通用映射迭代器 如下所示 class Mapper
  • 为什么 sys.getrefcount() 返回 2?

    据我了解 sys getrefcount 返回对象的引用数量 在以下情况下 应该 为 1 import sys numpy a numpy array 1 2 3 4 print sys getrefcount a 然而 结果却是2 所以
  • 下载 iOS 时流式传输视频

    我使用的是 iOS 7 我有一个 mp4 视频需要在我的应用程序中下载 该视频很大 约 1 GB 这就是它不包含在应用程序中的原因 我希望用户能够在开始下载后立即开始观看视频 我还希望视频能够缓存在 iOS 设备上 这样用户以后就不需要再次
  • 如何将日志记录添加到带有时间戳的文件到 Raspberry Pi 的 Python TCP 服务器

    我的项目有点陷入困境 我迫切需要帮助 我需要一个简单的 TCP 服务器 python 代码 它具有日志记录和时间戳等功能 我可以将其用于我的 Raspberry Pi 这是我的最后一年项目 我看过一些例子 但由于我在编写自己的脚本 代码方面