В Python в Google App Engine, как вы извлекаете вывод, созданный оператором печати?

Я работаю в среде Google Application Engine, где я загружаю доктрины и код python из строк, чтобы проверить домашние задания Python. Моя основная реализация ( предоставленная Алексом Мартелли ), по-видимому, работает для всех моих проблем, кроме тех, которые содержат заявление печати. Что-то кажется неправильным, когда я пытаюсь выполнить команду печати в GAE.

Как бы вы могли изменить этот пример, чтобы зафиксировать все, что было выписано оператором печати?

#This and most other code works class X(object): pass x=X() exec 'a=23' in vars(x) #This throws an error. class X(object): pass x=X() exec 'print 23' in vars(x) 

2 Solutions collect form web for “В Python в Google App Engine, как вы извлекаете вывод, созданный оператором печати?”

Я думаю, что у Hooked есть правильный ответ , но я думаю, что вам лучше сохранить значение sys.stdout прежде чем изменять его и впоследствии восстановить это значение, а не восстанавливать sys.__stdout__ потому что (я думаю) sys.stdout по-своему.

Это оставляет вам что-то вроде

 import StringIO import sys # Store App Engine's modified stdout so we can restore it later gae_stdout = sys.stdout # Redirect stdout to a StringIO object new_stdout = StringIO.StringIO() sys.stdout = new_stdout # Run your code here, however you're doing that # Get whatever was printed to stdout using the `print` statement (if necessary) printed = new_stdout.getvalue() # Restore App Engine's original stdout sys.stdout = gae_stdout 

Для этой проблемы мне нравится захватывать вывод строки напрямую. Внутри вашей функции я бы использовал что-то вроде:

 import StringIO, sys # create file-like string to capture output codeOut = StringIO.StringIO() # capture output and errors sys.stdout = codeOut err = '' try : exec code in code_namespace except Exception: err = str(sys.exc_info()[1]) 

И закончите с:
# restore stdout and stderr
sys.stdout = sys.__stdout__

Чтобы восстановить нормальную функцию печати.

  • Как остановить выполнение после self.redirect
  • Свойство BadRequestError: BLOB, ENITY_PROTO или TEXT concise_topics должно быть в поле raw_property
  • Ошибка секреты клиента API Google (Python)
  • Не удалось прочитать файл csv, загруженный в ведро Google Cloud Storage
  • Загружать изображения / видео в хранилище Google Cloud с помощью Google App Engine
  • повторное использование идентификатора объекта для других объектов разного типа - разумная идея?
  • уже выполненная транзакция
  • Проверка подписки на сообщение о покупке приложения для Android в Python в Google App Engine
  • Python - лучший язык программирования в мире.