Skip to content

Commit 9d35a78

Browse files
author
Vladimir Kotal
committed
print output to stdout if doprint is True
fixes #2403
1 parent 57bc6f4 commit 9d35a78

File tree

4 files changed

+23
-14
lines changed

4 files changed

+23
-14
lines changed

opengrok-tools/src/main/python/opengrok_tools/all/utils/command.py

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,8 @@ class TimeoutException(Exception):
4040
class Command:
4141
"""
4242
wrapper for synchronous execution of commands via subprocess.Popen()
43-
and getting their output (stderr is redirected to stdout) and return value
43+
and getting their output (stderr is redirected to stdout by default)
44+
and exit value
4445
"""
4546

4647
# state definitions
@@ -51,7 +52,7 @@ class Command:
5152

5253
def __init__(self, cmd, args_subst=None, args_append=None, logger=None,
5354
excl_subst=False, work_dir=None, env_vars=None, timeout=None,
54-
redirect_stderr=True, resource_limits=None):
55+
redirect_stderr=True, resource_limits=None, doprint=False):
5556
self.cmd = cmd
5657
self.state = "notrun"
5758
self.excl_subst = excl_subst
@@ -61,6 +62,7 @@ def __init__(self, cmd, args_subst=None, args_append=None, logger=None,
6162
self.pid = None
6263
self.redirect_stderr = redirect_stderr
6364
self.limits = resource_limits
65+
self.doprint = doprint
6466

6567
self.logger = logger or logging.getLogger(__name__)
6668
logging.basicConfig()
@@ -144,13 +146,16 @@ class OutputThread(threading.Thread):
144146
stdout/stderr buffers fill up.
145147
"""
146148

147-
def __init__(self, event, logger):
149+
def __init__(self, event, logger, doprint=False):
148150
super(OutputThread, self).__init__()
149151
self.read_fd, self.write_fd = os.pipe()
150152
self.pipe_fobj = os.fdopen(self.read_fd, encoding='utf8')
151153
self.out = []
152154
self.event = event
153155
self.logger = logger
156+
self.doprint = doprint
157+
158+
# Start the thread now.
154159
self.start()
155160

156161
def run(self):
@@ -169,6 +174,9 @@ def run(self):
169174

170175
self.out.append(line)
171176

177+
if self.doprint:
178+
print(line.strip())
179+
172180
def getoutput(self):
173181
return self.out
174182

@@ -199,15 +207,17 @@ def close(self):
199207

200208
timeout_thread = None
201209
output_event = threading.Event()
202-
output_thread = OutputThread(output_event, self.logger)
210+
output_thread = OutputThread(output_event, self.logger,
211+
doprint=self.doprint)
203212

204213
# If stderr redirection is off, setup a thread that will capture
205214
# stderr data.
206215
if self.redirect_stderr:
207216
stderr_dest = subprocess.STDOUT
208217
else:
209218
stderr_event = threading.Event()
210-
stderr_thread = OutputThread(stderr_event, self.logger)
219+
stderr_thread = OutputThread(stderr_event, self.logger,
220+
doprint=self.doprint)
211221
stderr_dest = stderr_thread
212222

213223
try:
@@ -217,9 +227,8 @@ def close(self):
217227
except PermissionError:
218228
pass
219229
self.logger.debug("command = {}".format(self.cmd))
220-
my_args = {}
221-
my_args['stderr'] = stderr_dest
222-
my_args['stdout'] = output_thread
230+
my_args = {'stderr': stderr_dest,
231+
'stdout': output_thread}
223232
if self.env_vars:
224233
my_env = os.environ.copy()
225234
my_env.update(self.env_vars)

opengrok-tools/src/main/python/opengrok_tools/all/utils/indexer.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -42,7 +42,7 @@ class Indexer(Java):
4242
"""
4343

4444
def __init__(self, command, logger=None, java=None, jar='opengrok.jar',
45-
java_opts=None, env_vars=None):
45+
java_opts=None, env_vars=None, doprint=False):
4646

4747
java_options = []
4848
if java_opts:
@@ -52,7 +52,7 @@ def __init__(self, command, logger=None, java=None, jar='opengrok.jar',
5252
logger.debug("Java options: {}".format(java_options))
5353

5454
super().__init__(command, jar=jar, java=java, java_opts=java_options,
55-
logger=logger, env_vars=env_vars)
55+
logger=logger, env_vars=env_vars, doprint=doprint)
5656

5757

5858
def get_SCM_properties(logger):

opengrok-tools/src/main/python/opengrok_tools/all/utils/java.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ class Java(Command):
3636

3737
def __init__(self, command, logger=None, main_class=None, java=None,
3838
jar=None, java_opts=None, classpath=None, env_vars=None,
39-
redirect_stderr=True):
39+
redirect_stderr=True, doprint=False):
4040

4141
if not java:
4242
java = self.FindJava(logger)
@@ -71,7 +71,7 @@ def __init__(self, command, logger=None, main_class=None, java=None,
7171
logger.debug("Java command: {}".format(java_command))
7272

7373
super().__init__(java_command, logger=logger, env_vars=env,
74-
redirect_stderr=redirect_stderr)
74+
redirect_stderr=redirect_stderr, doprint=doprint)
7575

7676
def FindJava(self, logger):
7777
"""

opengrok-tools/src/main/python/opengrok_tools/indexer.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -63,11 +63,11 @@ def main():
6363

6464
indexer = Indexer(args.options, logger=logger, java=args.java,
6565
jar=args.jar, java_opts=args.java_opts,
66-
env_vars=args.environment)
66+
env_vars=args.environment, doprint=True)
6767
indexer.execute()
6868
ret = indexer.getretcode()
6969
if ret is None or ret != 0:
70-
logger.error(indexer.getoutputstr())
70+
# The output is already printed thanks to 'doprint' above.
7171
logger.error("Indexer command failed (return code {})".format(ret))
7272
sys.exit(1)
7373

0 commit comments

Comments
 (0)