TCP服务器的Python日志记录

TCP服务器的Python日志记录,python,logging,tcp,Python,Logging,Tcp,我在为python TCP服务器代码添加日志文件时遇到一些问题。 我已经看过一些例子,但由于我在编写自己的脚本/代码方面没有太多经验,所以我不太确定如何进行这项工作。如果有人能给我提供正确的方向和解释,如果可能的话,我将不胜感激 我使用的是HERCULES安装实用程序,它充当我的TCP客户端,而我的VisualStudioPython代码充当服务器。我的服务器现在可以接收客户端发送的数据了,我似乎无法添加一个日志文件来将发送的数据保存到文本文件中。有人能给我一些例子或参考吗?你的帮助意义重大。这

我在为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客户机”不仅仅是写入文件。