2015-06-18 3 views
0

Мой питон 3 рисовал пошел, как это:как подключить sys.stdout к консольному окну в python?

import io, sys 
sys.stdout = io.StringIO() 
# no more responses to python terminal funnily enough 

Мой вопрос в том, как прикрепить так, когда я прохожу в 1+1, например, он будет возвращаться с 2 на консоль?

Это в интерпретаторе python на 32-разрядном питоне, запущенном на Windows 7 64 бит.

+0

где/как вы принимаете ввод? –

+0

перезапустить python? –

+0

Я мог @AnandSKumar, но я экспериментирую с тем, как работает stdout, и если бы я должен был создать собственный файл-подобный объект, чтобы, возможно, перенаправить stdout на этот объект. – user1561108

ответ

2

Вы ищете sys.__stdout__:

Он также может быть использован для восстановления фактических файлов известных объектов, работающих файлов в случае, если они были перезаписаны с разбитым объектом. Однако предпочтительный способ сделать это - явно сохранить предыдущий поток перед его заменой и восстановить сохраненный объект.

1

Не знаю, как вы принимаете вход, но это будет делать то, что вы хотите:

import io, sys 

f = io.StringIO() 
sys.stdout = f 

while True: 
    inp = input() 
    if inp == "1+1": 
     print(inp) 
     break 
sys.stdout = sys.__stdout__ 
print(eval(f.getvalue())) 

Или получить последнее значение вх:

импорта гипергликемии, SYS

f = io.StringIO() 
sys.stdout = io.StringIO() 

while True: 
    inp = input() 
    if inp == "1+1": 
     print(inp) 
     break 
sys.stdout = sys.__stdout__ 
print(eval(inp)) 

Или перейдя по эталону:

import io, sys 

sys.stdout = io.StringIO() 
for line in sys.stdin: 
    if line.strip() == "1+1": 
     print(line) 
     break 
sys.stdout = sys.__stdout__ 
print(eval(line)) 
Смежные вопросы