summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authornicolargo <nicolas@nicolargo.com>2018-12-23 15:03:08 +0100
committernicolargo <nicolas@nicolargo.com>2018-12-23 15:03:08 +0100
commitf0917c0c62c09b485fcee1031fb553fef0502468 (patch)
treeb3d572a7f3f55d4418c80eb506b1a4ab25a56b02
parent162ed8398602fbc548b4a682f636f8ffa08be1a4 (diff)
Standard output misbehaviour (need to flush) #1376
-rw-r--r--NEWS1
-rw-r--r--glances/compat.py10
-rw-r--r--glances/outputs/glances_stdout.py7
-rw-r--r--glances/outputs/glances_stdout_csv.py3
4 files changed, 17 insertions, 4 deletions
diff --git a/NEWS b/NEWS
index 26a2ddb6..e891c944 100644
--- a/NEWS
+++ b/NEWS
@@ -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