TCP服务器的Python日志记录
我在为python TCP服务器代码添加日志文件时遇到一些问题。 我已经看过一些例子,但由于我在编写自己的脚本/代码方面没有太多经验,所以我不太确定如何进行这项工作。如果有人能给我提供正确的方向和解释,如果可能的话,我将不胜感激 我使用的是HERCULES安装实用程序,它充当我的TCP客户端,而我的VisualStudioPython代码充当服务器。我的服务器现在可以接收客户端发送的数据了,我似乎无法添加一个日志文件来将发送的数据保存到文本文件中。有人能给我一些例子或参考吗?你的帮助意义重大。这是我目前的代码:TCP服务器的Python日志记录,python,logging,tcp,Python,Logging,Tcp,我在为python TCP服务器代码添加日志文件时遇到一些问题。 我已经看过一些例子,但由于我在编写自己的脚本/代码方面没有太多经验,所以我不太确定如何进行这项工作。如果有人能给我提供正确的方向和解释,如果可能的话,我将不胜感激 我使用的是HERCULES安装实用程序,它充当我的TCP客户端,而我的VisualStudioPython代码充当服务器。我的服务器现在可以接收客户端发送的数据了,我似乎无法添加一个日志文件来将发送的数据保存到文本文件中。有人能给我一些例子或参考吗?你的帮助意义重大。这
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 ))
在我看来,您的问题最好改为“如何在Python中读写文件?” 这是在以下网站上有详细记录的内容: 例如:
f = open('/tmp/log.txt', 'a')
f.write('Doing something')
do_something()
f.write('Other stuff')
other_stuff()
f.write('All finished')
f.close()
在上下文中,可能是这样的
#!/usr/local/cpython-2.7/bin/python
import socket
import thread
BUFF = 1024 # buffer size
HOST = '127.0.0.1'
PORT = 1234 # Port number for client & server to recieve data
def response(key):
return 'Sent by client'
def logger(string, file_=open('logfile.txt', 'a'), lock=thread.allocate_lock()):
with lock:
file_.write(string)
file_.flush() # optional, makes data show up in the logfile more quickly, but is slower
def handler(clientsock, addr):
while 1:
data = clientsock.recv(BUFF) # receive data(buffer).
logger('data:' + repr(data) + '\n') #Server to recieve data sent by client.
if not data:
break #If connection is closed by client, server will break and stop recieving data.
logger('sent:' + repr(response('')) + '\n') # respond by saying "Sent By Client".
if __name__=='__main__':
ADDR = (HOST, PORT) #Define Addr
serversock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
serversock.bind(ADDR) #Binds the ServerSocket to a specific address (IP address and port number)
serversock.listen(0)
while 1:
logger('waiting for connection...\n')
clientsock, addr = serversock.accept()
logger('...connected from: ' + str(addr) + '\n') #show its connected to which addr
thread.start_new_thread(handler, (clientsock, addr))
HTH您好,非常感谢您的代码。它以我想要的方式工作,比如如何将its保存到文本文件中,但是现在,当我调试代码时,会出现黑屏,但它不会显示正在接收的数据,而是只保存到文本文件中。有没有办法让它出现在我的黑色弹出屏幕以及保存的文本文件中?我以前的代码可以在弹出的黑屏上显示接收到的数据,但是在添加了日志功能之后,它就消失了。感谢您的帮助。添加到logger(),在with语句的某处:sys.stdout.write(string.Add to logger()?与中一样,在文件顶部的def logger?中添加“import sys”。是的,在with语句中添加sys.stdout.write(字符串),该语句位于logger.related中:完全不相关。这个问题很清楚,可以理解使用“Hercules作为我的TCP客户机”不仅仅是写入文件。