2016-01-21 9 views
0

Я использую python sys для сохранения моего stdout в текстовом файле.Остановить sys.stdout от записи в текстовый файл

sys.stdout=open('OLSYield.txt','w') 

Однако, я хочу, чтобы часть текста вышла в текст. Как остановить запись в txt-файл и перенаправить обратно на терминал или консоль?

Так это должно выглядеть как

sys.stdout=open('OLSYield.txt','w') 
print "helloWorld appears in text file" 

sys.stdout=close('OLSYield.txt','w') 
print "helloWorld appears in console" 

Im не уверен, что команда, которую я должен использовать, чтобы закрыть stdout=open

+0

'.stdout' прочитает все это - вы хотите использовать' .stdout.readline() 'вместо этого? –

+0

Посмотрите на это http://stackoverflow.com/questions/2804543/read-subprocess-stdout-line-by-line#answer-2813530 –

+1

@MacroMan: вы не можете использовать 'readline' на stdout. – jwodder

ответ

5

изменить вывод на консоль вам нужно сохранить ссылку на исходный стандартный вывод :

orig_stdout = sys.stdout 
sys.stdout=open('OLSYield.txt','w') 
print "helloWorld appears in text file" 

sys.stdout.close() 
sys.stdout=orig_stdout 
print "helloWorld appears in console" 
0

Вы можете остановить запись в файл и вернуться к консоли, как это:

sys.stdout = open("file.txt", "w") 
print "in file" 

sys.stdout.close() 
sys.stdout = open("/dev/stdout", "w") 

print "in console" 
+3

проблема с этим решением заключается в том, что он специфичен для платформы, поэтому он не работает на окнах –

+0

Вы на 100% прав. Как только я прочитал ваш ответ, я подумал об этом. С другой стороны, если вы работаете в каком-то env (например, CI?), А ваш исходный stdout - это не то, что вы хотите, вы тоже застряли. – sheeptest

+1

Мех. Нет. Возвращение к исходному stdout кажется самым чистым/безопасным. – sheeptest