Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Why are Python 3 Line breaks \n not working with print and subprocess Popen stdout?

Tags:

Python 3.7.1: Calling grep with subprocess.Popen to pull errors from a log file. When printing to screen, line breaks \n are not processed.

Example

a = subprocess.Popen(["grep", "ERR", "errors.log"], stdout=subprocess.PIPE)
print(a.stdout.read())

Output

ERR 1 ret: 31113\nERR 2 ret: 35523\nERR 3 ret: 3810 (etc.)

Can't imagine why the line breaks are not processed. I would expect this:

ERR 1 ret: 31113
ERR 2 ret: 35523
ERR 3 ret: 3810
(etc.)

Been combing the 'net for answers, but no luck. Thx :^)

References:

How would I specify a new line in Python?
Python Popen grep

like image 586
kmiklas Avatar asked Nov 07 '18 19:11

kmiklas


1 Answers

Specify an encoding to decode the subprocess output with. I can't tell you what your errors.log file is encoded with, but give "utf-8" a try:

a = Popen(["grep", "ERR", "errors.log"], stdout=subprocess.PIPE, encoding='utf-8')
like image 129
wim Avatar answered Oct 12 '22 13:10

wim