Возникла проблема при записи данных в файл в скрипте Python - PullRequest
0 голосов
/ 01 декабря 2011

Я должен записать 7231 байт в файл, используя скрипт Python.В клиент-серверной программе мой скрипт на python действует как клиент, и он получил 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 (Log)" записывает в файл.Если я получу 1023 байта, его запись в это полное содержание.Пожалуйста, помогите мне, как написать полные данные.Примечание. Я записываю данные в формате Hexa.

Ответы [ 2 ]

3 голосов
/ 01 декабря 2011

Во-первых, 7231 байт не совсем большой ...

С учетом предоставленной вами ограниченной информации, я думаю, вы могли забыть принять во внимание буфер записи ОС. Возможно, вы пытаетесь прочитать файл до того, как в него будет записано все содержимое.

Python обычно использует стандартный системный буфер ( вы можете изменить это ). Вы можете уменьшить этот буфер или вызвать flush самостоятельно.

0 голосов
/ 01 декабря 2011

Я просто догадываюсь, возможно, функция .read () не возвращает все данные в одном чанке;Можете ли вы попробовать изменить внутреннюю часть следующим образом:

if (response.status==200):
     while 1:
         Log = response.read()
         if not Log:
             break
         self.Logresponse(Log)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...