Compare commits
3 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
| 22000ec4c0 | |||
| 6bb276b509 | |||
| 1045dddb46 |
@ -465,9 +465,12 @@ def main():
|
|||||||
stdout_logger = proc_logger.getChild("stdout")
|
stdout_logger = proc_logger.getChild("stdout")
|
||||||
stderr_logger = proc_logger.getChild("stderr")
|
stderr_logger = proc_logger.getChild("stderr")
|
||||||
|
|
||||||
os.set_blocking(proc.stdin.fileno(), False)
|
stdin_fd = proc.stdin.fileno()
|
||||||
os.set_blocking(proc.stdout.fileno(), False)
|
stdout_fd = proc.stdout.fileno()
|
||||||
os.set_blocking(proc.stderr.fileno(), False)
|
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 = select.poll()
|
||||||
poll.register(
|
poll.register(
|
||||||
@ -481,7 +484,7 @@ def main():
|
|||||||
proc.stderr,
|
proc.stderr,
|
||||||
select.POLLIN | select.POLLPRI | select.POLLHUP | select.POLLERR,
|
select.POLLIN | select.POLLPRI | select.POLLHUP | select.POLLERR,
|
||||||
)
|
)
|
||||||
pollc = 3
|
pollc = 2
|
||||||
# logger.debug("First poll...")
|
# logger.debug("First poll...")
|
||||||
events = poll.poll()
|
events = poll.poll()
|
||||||
# logger.debug("Done, %d event(s)", len(events))
|
# logger.debug("Done, %d event(s)", len(events))
|
||||||
@ -493,7 +496,7 @@ def main():
|
|||||||
for rfd, event in events:
|
for rfd, event in events:
|
||||||
# logger.debug("rfd=%d, event=%x", rfd, event)
|
# logger.debug("rfd=%d, event=%x", rfd, event)
|
||||||
if event & select.POLLOUT:
|
if event & select.POLLOUT:
|
||||||
if rfd == proc.stdin.fileno():
|
if rfd == stdin_fd:
|
||||||
if chunk := pipe_buffer[:PIPE_BUF]:
|
if chunk := pipe_buffer[:PIPE_BUF]:
|
||||||
# logger.debug(
|
# logger.debug(
|
||||||
# "Writing chunk of length %d...", len(chunk)
|
# "Writing chunk of length %d...", len(chunk)
|
||||||
@ -510,7 +513,7 @@ def main():
|
|||||||
else:
|
else:
|
||||||
proc.stdin.close()
|
proc.stdin.close()
|
||||||
if event & select.POLLIN or event & select.POLLPRI:
|
if event & select.POLLIN or event & select.POLLPRI:
|
||||||
if rfd == proc.stdout.fileno():
|
if rfd == stdout_fd:
|
||||||
# logger.debug("Reading from stdout...")
|
# logger.debug("Reading from stdout...")
|
||||||
if chunk := proc.stdout.buffer.read(PIPE_BUF):
|
if chunk := proc.stdout.buffer.read(PIPE_BUF):
|
||||||
# logger.debug("Done, length %d", len(chunk))
|
# logger.debug("Done, length %d", len(chunk))
|
||||||
@ -527,12 +530,12 @@ def main():
|
|||||||
# logger.debug("Split: %r, %r, %r", line, sep, rest)
|
# logger.debug("Split: %r, %r, %r", line, sep, rest)
|
||||||
if sep:
|
if sep:
|
||||||
stdout_logger.info(
|
stdout_logger.info(
|
||||||
line.decode(errors="replace").strip()
|
line.decode(errors="replace").rstrip()
|
||||||
)
|
)
|
||||||
stdout_line_buffer = rest
|
stdout_line_buffer = rest
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
if rfd == proc.stderr.fileno():
|
if rfd == stderr_fd:
|
||||||
# logger.debug("Reading from stderr...")
|
# logger.debug("Reading from stderr...")
|
||||||
if chunk := proc.stderr.buffer.read(PIPE_BUF):
|
if chunk := proc.stderr.buffer.read(PIPE_BUF):
|
||||||
# logger.debug("Done, length %d", len(chunk))
|
# logger.debug("Done, length %d", len(chunk))
|
||||||
@ -549,27 +552,28 @@ def main():
|
|||||||
# logger.debug("Split: %r, %r, %r", line, sep, rest)
|
# logger.debug("Split: %r, %r, %r", line, sep, rest)
|
||||||
if sep:
|
if sep:
|
||||||
stderr_logger.info(
|
stderr_logger.info(
|
||||||
line.decode(errors="replace").strip()
|
line.decode(errors="replace").rstrip()
|
||||||
)
|
)
|
||||||
stderr_line_buffer = rest
|
stderr_line_buffer = rest
|
||||||
else:
|
else:
|
||||||
break
|
break
|
||||||
if event & select.POLLERR:
|
if event & select.POLLERR:
|
||||||
if rfd == proc.stdin.fileno():
|
if rfd == stdin_fd:
|
||||||
logger.error("STDIN error")
|
logger.error("STDIN error")
|
||||||
if rfd == proc.stdout.fileno():
|
if rfd == stdout_fd:
|
||||||
logger.error("STDOUT error")
|
logger.error("STDOUT error")
|
||||||
if rfd == proc.stderr.fileno():
|
if rfd == stderr_fd:
|
||||||
logger.error("STDERR error")
|
logger.error("STDERR error")
|
||||||
if event & select.POLLHUP:
|
if event & select.POLLHUP:
|
||||||
if rfd == proc.stdin.fileno():
|
if rfd == stdin_fd:
|
||||||
logger.debug("STDIN closed")
|
logger.debug("STDIN closed")
|
||||||
if rfd == proc.stdout.fileno():
|
if rfd == stdout_fd:
|
||||||
logger.debug("STDOUT closed")
|
logger.debug("STDOUT closed")
|
||||||
if rfd == proc.stderr.fileno():
|
pollc -= 1
|
||||||
|
if rfd == stderr_fd:
|
||||||
logger.debug("STDERR closed")
|
logger.debug("STDERR closed")
|
||||||
|
pollc -= 1
|
||||||
poll.unregister(rfd)
|
poll.unregister(rfd)
|
||||||
pollc -= 1
|
|
||||||
|
|
||||||
if pollc > 0:
|
if pollc > 0:
|
||||||
# logger.debug("Poll...")
|
# logger.debug("Poll...")
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user