Я хотел бы как захватить, так и отобразить вывод процесса, который я вызываю через Python '
Однако метод write ()
никогда не вызывается. Мой подход полностью отключен или я просто что-то упускаю?
class Process(object):
class StreamWrapper(object):
def __init__(self, stream):
self._stream = stream
self._buffer = []
def _print(self, msg):
print repr(self), msg
def __getattr__(self, name):
if not name in ['fileno']:
self._print("# Redirecting: %s" % name)
return getattr(self._stream, name)
def write(self, data):
print "###########"
self._buffer.append(data)
self._stream.write(data)
self._stream.flush()
def getBuffer(self):
return self._buffer[:]
def __init__(self, *args, **kwargs):
print ">> Running `%s`" % " ".join(args[0])
self._stdout = self.StreamWrapper(sys.stdout)
self._stderr = self.StreamWrapper(sys.stderr)
kwargs.setdefault('stdout', self._stdout)
kwargs.setdefault('stderr', self._stderr)
self._process = subprocess.Popen(*args, **kwargs)
self._process.communicate()
Что-то, что я бы тоже хотел поработать, - это управляющие символы ANSI для перемещения курсора и переопределения ранее выводимых данных. Я не знаю, правильный ли это термин, но вот пример того, что я имел в виду: я пытаюсь автоматизировать некоторые вещи GIT, и у них есть прогресс, который обновляется, не записывая каждый раз новую строку.
Для меня важно, чтобы вывод подпроцесса отображался сразу. Я пробовал использовать subprocess.PIPE для захвата вывода и отображения его вручную, но мне удалось заставить его отображать вывод только после завершения процесса. Однако я бы хотел видеть результат в реальном времени.