2013-12-23 22 views
0

我在爲我的python TCP服務器代碼添加日誌記錄文件時遇到了一些問題。 我看了一些例子,但由於我沒有太多的經驗來編寫我自己的腳本/代碼,我不知道如何去做這件事。如果有人能夠在正確的方向引導我解釋並儘可能舉例,我將不勝感激。用於TCP服務器的Python日誌記錄

我使用的是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)) 
+0

相關:如何用日誌記錄時間戳添加到文件,以一個Python TCP服務器爲樹莓派(http://stackoverflow.com/q/20695241/4279) – jfs

回答

-1

這聽起來好像是你的問題會得到更好的重新表述「如何閱讀和Python中寫入文件?」。 http://docs.python.org/2.7/tutorial/inputoutput.html#reading-and-writing-files

例:

f = open('/tmp/log.txt', 'a') 

f.write('Doing something') 
do_something() 

f.write('Other stuff') 
other_stuff() 

f.write('All finished') 
f.close() 
+0

風馬牛不相及。這個問題很明顯的可以理解,使用「充當我的TCP客戶端的Hercules」不僅僅是寫入文件。 – dlewin

0

在上下文中,也許這樣的事情

這是一件很好的記錄?

#!/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

+0

嗨,非常感謝你這個代碼。它以我想要的方式工作,就像它保存在文本文件中一樣,但現在,當我調試我的代碼時,會出現黑屏,但它不會顯示正在接收的數據,而只是它保存到文本文件中。有沒有一種方法可以讓它出現在我的黑色彈出屏幕以及保存的文本文件中?我之前的代碼可以顯示在彈出的黑屏上收到的數據,但在添加日誌功能後,它會消失。感謝您的幫助。 – user3128219

+0

添加到記錄器(),在with語句的某處:sys.stdout.write(string)。 – dstromberg

+0

添加到記錄器()?在def記錄器裏面呢? – user3128219