Let pty recorder report elapsed time

This commit is contained in:
Marcin Kulik
2019-03-23 12:26:20 +01:00
parent d56f275a1b
commit 8aecc1d558
4 changed files with 14 additions and 11 deletions

View File

@@ -32,8 +32,8 @@ class writer():
self.queue.put(None) self.queue.put(None)
self.process.join() self.process.join()
def write_stdin(self, data): def write_stdin(self, ts, data):
pass pass
def write_stdout(self, data): def write_stdout(self, ts, data):
self.queue.put(data) self.queue.put(data)

View File

@@ -176,17 +176,16 @@ class async_writer():
args=(self.path, header, mode, self.queue) args=(self.path, header, mode, self.queue)
) )
self.process.start() self.process.start()
self.start_time = time.time() - self.time_offset
return self return self
def __exit__(self, exc_type, exc_value, exc_traceback): def __exit__(self, exc_type, exc_value, exc_traceback):
self.queue.put(None) self.queue.put(None)
self.process.join() self.process.join()
def write_stdin(self, data): def write_stdin(self, ts, data):
ts = time.time() - self.start_time ts = ts + self.time_offset
self.queue.put([ts, 'i', data]) self.queue.put([ts, 'i', data])
def write_stdout(self, data): def write_stdout(self, ts, data):
ts = time.time() - self.start_time ts = ts + self.time_offset
self.queue.put([ts, 'o', data]) self.queue.put([ts, 'o', data])

View File

@@ -10,12 +10,14 @@ import signal
import struct import struct
import sys import sys
import termios import termios
import time
from asciinema.term import raw from asciinema.term import raw
def record(command, writer, env=os.environ, rec_stdin=False): def record(command, writer, env=os.environ, rec_stdin=False):
master_fd = None master_fd = None
start_time = None
def _set_pty_size(): def _set_pty_size():
''' '''
@@ -40,7 +42,7 @@ def record(command, writer, env=os.environ, rec_stdin=False):
def _handle_master_read(data): def _handle_master_read(data):
'''Handles new data on child process stdout.''' '''Handles new data on child process stdout.'''
writer.write_stdout(data) writer.write_stdout(time.time() - start_time, data)
_write_stdout(data) _write_stdout(data)
def _write_master(data): def _write_master(data):
@@ -56,7 +58,7 @@ def record(command, writer, env=os.environ, rec_stdin=False):
_write_master(data) _write_master(data)
if rec_stdin: if rec_stdin:
writer.write_stdin(data) writer.write_stdin(time.time() - start_time, data)
def _signals(signal_list): def _signals(signal_list):
old_handlers = [] old_handlers = []
@@ -129,6 +131,8 @@ def record(command, writer, env=os.environ, rec_stdin=False):
_set_pty_size() _set_pty_size()
start_time = time.time()
with raw(pty.STDIN_FILENO): with raw(pty.STDIN_FILENO):
try: try:
_copy(pipe_r) _copy(pipe_r)

View File

@@ -12,10 +12,10 @@ class FakeStdout:
def __init__(self): def __init__(self):
self.data = [] self.data = []
def write_stdout(self, data): def write_stdout(self, ts, data):
self.data.append(data) self.data.append(data)
def write_stdin(self, data): def write_stdin(self, ts, data):
pass pass