diff options
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | glances/compat.py | 10 | ||||
-rw-r--r-- | glances/outputs/glances_stdout.py | 7 | ||||
-rw-r--r-- | glances/outputs/glances_stdout_csv.py | 3 |
4 files changed, 17 insertions, 4 deletions
@@ -24,6 +24,7 @@ Bugs corrected: * Support for monochrome (serial) terminals e.g. vt220 #1362 * TypeError on opening (Wifi plugin) #1373 * Some field name are incorrect in CSV export #1372 + * Standard output misbehaviour (need to flush) #1376 Others: diff --git a/glances/compat.py b/glances/compat.py index 3563810a..2aaf099e 100644 --- a/glances/compat.py +++ b/glances/compat.py @@ -21,6 +21,7 @@ # pylint: skip-file """Python 2/3 compatibility shims.""" +from __future__ import print_function import operator import sys import unicodedata @@ -54,6 +55,10 @@ if PY3: viewvalues = operator.methodcaller('values') viewitems = operator.methodcaller('items') + def printandflush(string): + """Print and flush (used by stdout* outputs modules)""" + print(string, flush=True) + def to_ascii(s): """Convert the bytes string to a ASCII string Usefull to remove accent (diacritics)""" @@ -126,6 +131,11 @@ else: viewvalues = operator.methodcaller('viewvalues') viewitems = operator.methodcaller('viewitems') + def printandflush(string): + """Print and flush (used by stdout* outputs modules)""" + print(string) + sys.stdout.flush() + def mean(numbers): return float(sum(numbers)) / max(len(numbers), 1) diff --git a/glances/outputs/glances_stdout.py b/glances/outputs/glances_stdout.py index a3c70cc5..065495e2 100644 --- a/glances/outputs/glances_stdout.py +++ b/glances/outputs/glances_stdout.py @@ -22,6 +22,7 @@ import time from glances.logger import logger +from glances.compat import printandflush class GlancesStdout(object): @@ -70,13 +71,13 @@ class GlancesStdout(object): if attribute is not None: # With attribute try: - print("{}.{}: {}".format(plugin, attribute, - stat[attribute])) + printandflush("{}.{}: {}".format(plugin, attribute, + stat[attribute])) except KeyError as err: logger.error("Can not display stat {}.{} ({})".format(plugin, attribute, err)) else: # Without attribute - print("{}: {}".format(plugin, stat)) + printandflush("{}: {}".format(plugin, stat)) # Wait until next refresh if duration > 0: diff --git a/glances/outputs/glances_stdout_csv.py b/glances/outputs/glances_stdout_csv.py index 8280c5f3..06775140 100644 --- a/glances/outputs/glances_stdout_csv.py +++ b/glances/outputs/glances_stdout_csv.py @@ -22,6 +22,7 @@ import time from glances.logger import logger +from glances.compat import printandflush class GlancesStdoutCsv(object): @@ -128,7 +129,7 @@ class GlancesStdoutCsv(object): line += self.build_data(plugin, attribute, stat) # Display the line (without the last 'separator') - print(line[:-1]) + printandflush(line[:-1]) # Display header one time self.header = False |