0

first of all, I know there are many ways to capture the output of a shell... I have found this and works fine:

from subprocess import Popen, PIPE

with Popen(["ping", "localhost"], stdout=PIPE, bufsize=1, universal_newlines=True) as p:
        for line in p.stdout:
            if "bytes" in line:
                print(line, end='')

But I need to get debugging info from de cmd, and this doesn't work... I am trying to get the output from geth that throws some info like:

mypc@thispc:~$ geth --light
INFO [07-02|21:56:08] Starting peer-to-peer node               
INFO [07-02|21:56:08] Allocated cache and file handles         
INFO [07-02|21:56:08] Initialised chain configuration          
INFO [07-02|21:56:08] Disk storage enabled for ethash caches   
INFO [07-02|21:56:08] Disk storage enabled for ethash DAGs     
INFO [07-02|21:56:08] Added trusted CHT for mainnet 
INFO [07-02|21:56:08] Loaded most recent local header

This is debugging info so, I don't know why, but i cannot capture normally to work with it. I need something like:

with Popen(["geth", "--light"], stdout=PIPE, bufsize=1, universal_newlines=True) as p:
        for line in p.stdout:
            if "Loaded" in line:
                print("NICE!!")

Is there any way to do It?

pctripsesp
  • 45
  • 8

1 Answers1

0

Thanks to kwarunek for the answer, It worked

Often debug messages are in stderr. Try to capture stderr with stderr=PIPE and then p.stderr

from subprocess import Popen, PIPE

with Popen(["geth", "--light"], stderr=PIPE, bufsize=1, universal_newlines=True) as p:
    for line in p.stderr:
        if "Block synchronisation started" in line:
            print(line, end='')
pctripsesp
  • 45
  • 8