memoize stdin/stdout/stderr fds

This commit is contained in:
Gregor Kleen 2023-05-29 17:42:12 +02:00
parent aa1f9dbd1c
commit 1045dddb46

View File

@ -465,9 +465,12 @@ def main():
stdout_logger = proc_logger.getChild("stdout")
stderr_logger = proc_logger.getChild("stderr")
os.set_blocking(proc.stdin.fileno(), False)
os.set_blocking(proc.stdout.fileno(), False)
os.set_blocking(proc.stderr.fileno(), False)
stdin_fd = proc.stdin.fileno()
stdout_fd = proc.stdout.fileno()
stderr_fd = proc.stderr.fileno()
os.set_blocking(stdin_fd, False)
os.set_blocking(stdout_fd, False)
os.set_blocking(stderr_fd, False)
poll = select.poll()
poll.register(
@ -493,7 +496,7 @@ def main():
for rfd, event in events:
# logger.debug("rfd=%d, event=%x", rfd, event)
if event & select.POLLOUT:
if rfd == proc.stdin.fileno():
if rfd == stdin_fd:
if chunk := pipe_buffer[:PIPE_BUF]:
# logger.debug(
# "Writing chunk of length %d...", len(chunk)
@ -510,7 +513,7 @@ def main():
else:
proc.stdin.close()
if event & select.POLLIN or event & select.POLLPRI:
if rfd == proc.stdout.fileno():
if rfd == stdout_fd:
# logger.debug("Reading from stdout...")
if chunk := proc.stdout.buffer.read(PIPE_BUF):
# logger.debug("Done, length %d", len(chunk))
@ -532,7 +535,7 @@ def main():
stdout_line_buffer = rest
else:
break
if rfd == proc.stderr.fileno():
if rfd == stderr_fd:
# logger.debug("Reading from stderr...")
if chunk := proc.stderr.buffer.read(PIPE_BUF):
# logger.debug("Done, length %d", len(chunk))
@ -555,18 +558,18 @@ def main():
else:
break
if event & select.POLLERR:
if rfd == proc.stdin.fileno():
if rfd == stdin_fd:
logger.error("STDIN error")
if rfd == proc.stdout.fileno():
if rfd == stdout_fd:
logger.error("STDOUT error")
if rfd == proc.stderr.fileno():
if rfd == stderr_fd:
logger.error("STDERR error")
if event & select.POLLHUP:
if rfd == proc.stdin.fileno():
if rfd == stdin_fd:
logger.debug("STDIN closed")
if rfd == proc.stdout.fileno():
if rfd == stdout_fd:
logger.debug("STDOUT closed")
if rfd == proc.stderr.fileno():
if rfd == stderr_fd:
logger.debug("STDERR closed")
poll.unregister(rfd)
pollc -= 1