2011-12-01 2 views
0

파이썬 스크립트를 사용하여 파일에 7231 바이트를 써야합니다. 클라이언트 - 서버 프로그램에서 파이썬 스크립트는 클라이언트처럼 작동하고 서버로부터 7231 바이트를 받았다. TCP-Dump를 체크 인하면, 완전한 데이터가 표시됩니다. 하지만 파일에 쓸 때; 나는 그 내용을 놓치고있다.파이썬 스크립트로 파일에 데이터를 쓰는 동안 문제가 발생했습니다.

내 스크립트를

def SendOnce(self, req='/gpsData=1',method="GET"): 
     conn = httplib.HTTPConnection(self.proxy) 
     self.Logresponse("\nConnection Open\n<br />") 
     conn.request(method,req) 
     Log="\nRequest Send: %s\n<br \>\n" %req 
     self.Logresponse(Log) 
     response = conn.getresponse() 
     Log = "\nResponse Code: %s\n<br \>\n" %response.status 
     self.Logresponse(Log) 
     Log = "\nSarav -- Get Header: %s \n version= %s <br \>\n"   %(response.msg,response.version) 
     self.Logresponse(Log) 
     if (response.status==200): 
      Log = response.read() 
      self.Logresponse(Log) 
     conn.close() 
     self.Logresponse("\nConnection Close\n<br \>") 
     return response 

이 "self.Logresponse (로그)"파일에 쓰고있다. 만약 내가 1023 바이트를받는다면, 그것의 전체 내용을 쓰는 것. 완전한 데이터 작성 방법을 알려주십시오. 참고 : Hexa Format 데이터를 쓰고 있습니다. 모든

+2

코드 서식 ('{}'아이콘)을 사용하십시오. 그렇지 않으면 들여 쓰기가 의미 상으로 중요하기 때문에 그 구조를 추측해야합니다. – NPE

+5

7K는 언제 "거대한"양의 데이터입니까? – geoffspear

+3

아마도이 문제를 돕기 위해'Logresponse'를 볼 필요가있을 것입니다. – mtrw

답변

3

첫째, 7231 바이트 ... 당신이, 당신이 계정에 OS의 쓰기 버퍼을 잊어 버린 수도 거라 생각했다 제한된 정보와

정확히 거대한 없습니다. 모든 내용이 기록되기 전에 파일을 읽으려고합니다.

일반적으로 Python은 시스템의 표준 버퍼 (you can change that)를 사용합니다. 버퍼를 줄이거 나 flush을 강제로 수행 할 수 있습니다.

+2

파일에 [컨텍스트 관리] (http://docs.python.org/library/stdtypes.html#context-manager-types)를 사용하는 것도 좋은 방법입니다. – Basilevs

+0

Logresponse 코드 : { 데프 Logresponse (자동 응답) : 메시지 = 응답 로그 = 개방 ("// BSRLog.html 로그 .//" 'A') logfile.write (메시지) logfile.close() } – user1042979

+0

음, 좋지 않습니다. close()는 이미 암시 적 flush()를 수행합니다. 이것은 데이터가 실제로 물리적으로 디스크에 있어야한다는 것을 의미하지는 않습니다. 그러나 다음 open()은 실제로 모든 것을 반환해야합니다 ... Strange. Logresponse에서 bufsize를 0으로 설정하여 열려고 시도 할 수 있습니까? open (".// log // BSRLog.html", 'a', 0)' – rwos

0

.read() 함수가 하나의 청크에있는 모든 데이터를 반환하지 않을 수도 있습니다. 다음과 같이 내부 부품을 수정할 수 있습니까?

if (response.status==200): 
    while 1: 
     Log = response.read() 
     if not Log: 
      break 
     self.Logresponse(Log) 
+0

위의 코드에서 구문 오류가 발생했습니다. 이 break 문에 맞는 곳. 그것의 구문 오류가 발생했다 : 브레이크가 루프 밖입니다 – user1042979

+0

들여 쓰기를 확인하십시오; while 루프에서 'break'가 나옵니다. 이것은 올바른 코드입니다. – ondra

관련 문제