2013-12-23 4 views
0

파이썬 TCP 서버 코드에 대한 로깅 파일을 추가하는 데 문제가 있습니다. 몇 가지 예를 살펴 보았지만 자신의 스크립트/코드를 작성하는 데 많은 경험이 없기 때문에이 작업을 수행하는 방법을 잘 모릅니다. 가능하면 누군가가 설명과 함께 올바른 방향으로 나를 안내 할 수 있으면 고맙겠습니다.TCP 서버용 파이썬 로깅

Visual Studio Python 코드가 SERVER 역할을하는 동안 HERCULES SETUP UTILITY를 TCP 클라이언트로 사용하고 있습니다. 내 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)) 
+0

관련 : [라즈베리 파이를위한 파이썬 TCP 서버에 타임 스탬프 파일에 로깅을 추가하는 방법 (http://stackoverflow.com/q/20695241/4279) – jfs

답변

-1

그것은 나에게 소리 :이 지금까지 내 코드입니다 "어떻게 읽고 파이썬 내에서 파일을 작성하려면 어떻게해야합니까?". 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 문 아래에 logger()에 추가 : sys.stdout.write (string). – dstromberg

+0

로거()에 추가 하시겠습니까? 에서와 같이, def logger 내부? – user3128219