2015-04-27 1 views
0

Скажем, у меня есть программа python, состоящая из трех строк.Python IO: отключить стандартный выходной поток и распечатать то, что мы хотим

if __name__=“__main__”: 
    foo() 
    print “Hello” 

Здесь foo() является функцией третьей части, которая выводит вещи на стандартный вывод. Например, foo() имеет только одну строку print 'I am here'. Дело в том, что у меня нет разрешения на изменение foo(), которое может содержать выходные операторы, и я не хочу смешивать его вывод с моим.

Вопрос:

Как я могу изменить третью строку программы выше (печать «Hello»), так что эта программа

1.Only печатает «Hello», и

2. ничего не печатает от foo()?

Спасибо за ваши идеи.

+0

Что находится в foo? –

+1

Если вы хотите получить доступ к значению позже, вы можете сохранить его в объекте StringIO. Http://pastebin.com/NHWAjJQv –

+1

@PadraicCunningham Это хорошо знать. Благодарю. – zell

ответ

3

Вы можете перенаправить stdout на номер os.devnull (null device); следующие:

import os 
import sys 
def foo(): 
    print "foo" 
if __name__ == "__main__": 
    out = sys.stdout 
    null = open(os.devnull, 'w') 
    sys.stdout = null 
    foo() 
    sys.stdout = out 
    print "Hello" 

будет печатать Hello. Вы можете прочитать о нулевом устройстве here.

+0

Большое спасибо за ваш быстрый ответ. Я искал что-то вроде>/dev/null. – zell

+0

Не нужно благодарить меня - скорее, примите мой вопрос, я не против репутации; P – EvenLisle

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