Как очистить вывод функции печати?

Поскольку start () не просто вызывает run (). Он запускает новый поток и в этом потоке вызывает run ().

1048
задан martineau 7 June 2018 в 01:50
поделиться

7 ответов

import sys
sys.stdout.flush()

print печатью по умолчанию к sys.stdout.

Ссылки

Python 2

объект файла Python 3

1231
ответ дан wjandrea 7 June 2018 в 01:50
поделиться

Почему бы не попробовать использовать небуферизованный файл?

f = open('xyz.log', 'a', 0)

ИЛИ

sys.stdout = open('out.log', 'a', 0)
19
ответ дан Nakilon 7 June 2018 в 01:50
поделиться

Я сделал это в Python 3.4:

'''To write to screen in real-time'''
message = lambda x: print(x, flush=True, end="")
message('I am flushing out now...')
4
ответ дан Aaron Hall 7 June 2018 в 01:50
поделиться

Работая python -h, я вижу параметр командной строки :

-u: освободивший буфер двоичный файл stdout и stderr; также PYTHONUNBUFFERED=x видят, что страница справочника для получения дополнительной информации о внутренней буферизации, касающейся '-u'

Вот, соответствующий документ .

325
ответ дан gimel 7 June 2018 в 01:50
поделиться

Используя -u работы переключателя командной строки, но это немного неуклюже. Это означало бы, что программа потенциально вела бы себя неправильно, если бы пользователь вызвал сценарий без -u опция. Я обычно использую пользовательское stdout, как это:

class flushfile:
  def __init__(self, f):
    self.f = f

  def write(self, x):
    self.f.write(x)
    self.f.flush()

import sys
sys.stdout = flushfile(sys.stdout)

... Теперь весь Ваш print вызовы (которые используют sys.stdout неявно), будет автоматически flush редактор

36
ответ дан Jean-François Fabre 7 June 2018 в 01:50
поделиться

Идея Dan не вполне работает:

#!/usr/bin/env python
class flushfile(file):
    def __init__(self, f):
        self.f = f
    def write(self, x):
        self.f.write(x)
        self.f.flush()

import sys
sys.stdout = flushfile(sys.stdout)

print "foo"

результат:

Traceback (most recent call last):
  File "./passpersist.py", line 12, in <module>
    print "foo"
ValueError: I/O operation on closed file

я полагаю, что проблема состоит в том, что это наследовалось классу файла, который на самом деле не необходим. Согласно документам для sys.stdout:

stdout и stderr needn’t быть встроенными объектами файла: любой объект приемлем, пока он имеет запись () метод, который берет аргумент строки.

настолько изменяющийся

class flushfile(file):

к [1 110]

class flushfile(object):

заставляет его работать просто великолепно.

13
ответ дан Kamil Kisiel 7 June 2018 в 01:50
поделиться

Вот моя версия, которая также предоставляет writelines () и fileno ():

class FlushFile(object):
    def __init__(self, fd):
        self.fd = fd

    def write(self, x):
        ret = self.fd.write(x)
        self.fd.flush()
        return ret

    def writelines(self, lines):
        ret = self.writelines(lines)
        self.fd.flush()
        return ret

    def flush(self):
        return self.fd.flush

    def close(self):
        return self.fd.close()

    def fileno(self):
        return self.fd.fileno()
8
ответ дан m45t3r 7 June 2018 в 01:50
поделиться
Другие вопросы по тегам:

Похожие вопросы: