2016-05-24 3 views
-1

Я использую eval(), и мне нужно распечатать вывод. Например, eval('1+1') вернет 2, но eval('print('hello')') вернет None. Как сохранить вывод оболочки Python?Сохранение вывода Python в строке

+6

Почему вы используете 'ева()' л? Вы получаете 'None', потому что' print() 'не имеет возвращаемого значения, поэтому он вычисляет' None'. Что ты пытаешься сделать? – IanAuld

+0

@TessellatingHeckler eval и внешние команды не связаны. –

+2

Это классика [проблема XY] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). Если вы выясните правильное решение проблемы, с которой вы столкнулись, а не с помощью 'eval()', у вас не будет этой новой проблемы. Можете ли вы рассказать нам о первоначальной проблеме, которую вы пытаетесь решить? – TigerhawkT3

ответ

0

Если вы действительно хотите, чтобы перенаправить стандартный вывод переменной, используйте StringIO для переменной или использовать файл

from io import StringIO 
# from StringIO import StringIO -- python 2.x 
import sys 
my_out = StringIO() 
sys.stdout = my_out 
print("hello") # now stored in my_out 

или

my_file = open('my_file.txt', 'w') 
sys.stdout = my_file 
print("hello") # now written to my_file.txt 
+0

Это правильно, но упущено много. Дубликат, который я связал, содержит более подробные ответы. –

+0

Нет модуля с именем 'StringIO' Любые идеи? –

+0

Можно ли прочитать sys.stdout? Потому что если так, моя проблема решена. –

Смежные вопросы