rsyslog/tests/testsuites/omprog-output-capture-mt-bin.py
Yi Fan Yu 0aac143f77 testbench: Remove python shebang in tests/testsuites
py files should be run as ${PYTHON} *.py

reference issue: #3853

Signed-off-by: Yi Fan Yu <yifan.yu@windriver.com>
2021-03-10 14:09:58 -05:00

36 lines
1.4 KiB
Python
Executable File

# call this via "python[3] script name"
import sys
import os
lineLength = int(sys.argv[1])
linePrefix = "[{0:09d}] ".format(os.getpid())
logLine = sys.stdin.readline()
while logLine:
logLine = logLine.strip()
numRepeats = int(lineLength / len(logLine))
lineToStdout = (linePrefix + "[stdout] " + logLine*numRepeats)[:lineLength]
lineToStderr = (linePrefix + "[stderr] " + logLine*numRepeats)[:lineLength]
sys.stdout.write(lineToStdout + "\n")
sys.stderr.write(lineToStderr + "\n")
# Flush stdout. In both Python 2 and Python 3, stdout is block-buffered when
# redirected to a file/pipe. But be want each line to be written immediately,
# because multiple processes are writing to the same pipe, and we do not want
# lines to appear intermingled in the output file. (The flush will cause a
# single 'write' syscall, since the size of the block buffer is generally
# greater than PIPE_BUF.)
sys.stdout.flush()
# Flush stderr. This is not necessary in Python 2, since stderr is unbuffered
# (and therefore each write will be written immediately and atomically to the
# pipe). However, in Python 3 stderr is block-buffered when redirected to a
# file/pipe. (Note: in future versions of Python 3, stderr could change to
# line-buffered; see https://bugs.python.org/issue13601.)
sys.stderr.flush()
logLine = sys.stdin.readline()