urllib.read () результат, возвращающий нулевое значение - PullRequest
2 голосов
/ 13 декабря 2011

Я пытаюсь прочитать и распечатать результат с URL Google в GAE. Когда я запускаю первую программу, вывод был пустым. Затем я добавил оператор печати перед печатью результата URL и запустил его. Теперь я получил результат.

Почему Программа 1 не дает никакого вывода?

Программа 1

import urllib

class MainHandler(webapp.RequestHandler): 
def get(self):              
    url = urllib.urlopen("http://www.google.com/ig/calculator?hl=en&q=100EUR%3D%3FAUD")
    result = url.read()
    print result

Программа 2

import urllib

class MainHandler(webapp.RequestHandler): 
def get(self):
    # Print something before print urllib result
    print "Result -"       
    url = urllib.urlopen("http://www.google.com/ig/calculator?hl=en&q=100EUR%3D%3FAUD")
    result = url.read()
    print result

Ответы [ 2 ]

4 голосов
/ 14 декабря 2011

Вы используете print из приложения WSGI. Никогда, никогда не используйте print внутри приложения WSGI.

Что происходит, так это то, что ваш текст выводится в том месте, где веб-сервер ожидает увидеть заголовки, поэтому ваш вывод не отображается так, как вы ожидаете.

Вместо этого вы должны использовать self.response.out.write() для отправки вывода пользователю и logging.info и т. Д. Для отладки данных.

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

Я встречал эту проблему раньше.Но пока не могу найти точный ответ.
может быть cache mechanism причина этой проблемы, не уверен.
Вам нужно сделать flush output, чтобы напечатать данные:

import sys
sys.stdout.flush()

или простосделайте так, как вы:

print "*" * 10
print data

Я думаю, вам понравится logging при отладке:

logging.debug('A debug message here')

или

logging.info('The result is: %s', yourResultData)
...