use*_*228 8 python logging tcpserver raspberry-pi
我有点被困在我的项目中,我迫切需要帮助.我需要一个简单的TCP服务器python代码,它具有日志和时间戳等功能,我可以用于我的Raspberry Pi.它是我的最后一年项目.
我看了一些例子,但由于我在编写自己的脚本/代码方面没有太多经验,所以我不太清楚如何去做.如果有人可以通过解释和一些例子(如果可能的话)指导我正确的方向,我将不胜感激.
我正在使用HERCULES SETUP UTILITY,它充当我的TCP客户端,而我的visual studio python代码充当SERVER.我的SERVER可以接收客户端发送的数据,我现在似乎无法添加一个日志文件,可以将发送的数据保存到文本文件中.有人请给我一些例子或者说明一下吗?你的帮助意味着很多.到目前为止这是我的代码:
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 ))
Run Code Online (Sandbox Code Playgroud)
jfs*_*jfs 30
要将日志记录添加到带有时间戳的文件,您可以使用logging
模块:
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")
Run Code Online (Sandbox Code Playgroud)
如果你运行代码; 你应该看到myserver.log
(+/-你的时区和当前时间):
2013-12-24 09:20:17,739 some message
Run Code Online (Sandbox Code Playgroud)
这是一个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()
Run Code Online (Sandbox Code Playgroud)
如果代码保存在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
Run Code Online (Sandbox Code Playgroud)
要运行客户端:
$ echo abc | nc localhost 8826
Sent by Client: abc
Run Code Online (Sandbox Code Playgroud)