В 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__

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

  • Получение случайной записи из хранилища данных Google App Engine?
  • Как JSON кодирует объекты?
  • Python App Engine: используйте app.yaml для управления обработчиком URL
  • Как использовать очередь задач App Engine с помощью вычисления экземпляра двигателя
  • Программный поиск google в Python с помощью пользовательского поиска
  • Кто-нибудь преуспел в использовании Google App Engine с Python версии 2.6?
  • ImportError: невозможно импортировать имя SignedJwtAssertionCredentials с помощью сервера AppEngine dev
  • Django в Google AppEngine с CloudSQL: как подключиться к базе данных (ошибка 2002, не удается подключиться к локальному серверу MySQL ..)
  • Новый порт Python 3 API Google Python API
  • Пользовательская аутентификация для конечных точек Google Cloud (вместо OAuth2)
  • Ошибка времени ожидания библиотеки Python для AppEngine Cloud Storage
  •  
    Interesting Posts for Van-Lav

    Python – обнаруживает, когда мой объект записывается в stdout?

    Объект «Пользователь» не поддерживает индексирование

    Как удалить запись из таблицы?

    Заполнение пробелов данных со средним объемом данных из смежных дней

    Ячейка вывода IPython Notebook усекает содержимое моего списка

    Очистить несколько URL-адресов, используя QWebPage

    Подклассификация встроенных типов в Python 2 и Python 3

    locals (). update (dictionary) не добавляет все переменные

    Python.h не найден с использованием swig и Anaconda Python

    Python – оптимизация поиска идеального номера

    Python: Выполнять несколько скриптов одновременно с одного и того же переводчика

    Lazy SAX XML-анализатор с остановкой / возобновлением

    TypeError: объект «RelatedManager» не является итерируемым

    Можно ли сортировать в python 3 с использованием сопоставлений строк в буфере (на основе указателей)?

    Как вы разбираете вложенные теги XML с помощью python?

    Python - лучший язык программирования в мире.