Python Forum
Capture grep output to a variable which includes another variable - Printable Version

+- Python Forum (https://python-forum.io)
+-- Forum: Python Coding (https://python-forum.io/forum-7.html)
+--- Forum: General Coding Help (https://python-forum.io/forum-8.html)
+--- Thread: Capture grep output to a variable which includes another variable (/thread-22660.html)



Capture grep output to a variable which includes another variable - kdefilip2 - Nov-21-2019

I have set a variable strFileExt to a file path/name: /var/log/error.log.112119

I would now like to grep that file, capturing output to a second variable. If there is no output (text does not exist) I will exit. If it does return output, I will then move on to perform other things with this file.

I have tried many variations of the following to no success:

strFile = os.popen('grep -rlw "reported errors in the" + strFileExt+').read()
Is there a way to set this strFile variable using the grep command which includes the first set variable of strFileExt ?

Thanks in advance.


RE: Capture grep output to a variable which includes another variable - scidam - Nov-22-2019

I would suggest to use subprocess.run command, e.g.

import subprocess
what = "what"
where = "/home/yourfolder/yourfile"
p = subprocess.run(["grep", what, where], capture_output=True)   
p.stdout  # is what you need



RE: Capture grep output to a variable which includes another variable - kdefilip2 - Nov-22-2019

Scidam, that looked promising, but getting error. Also, had to change subprocess.run to subprocess.call due to being on Python 2.7.

Here's my code:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

strFileExt=""
strFile=""


# import required modules
import datetime
import os
import subprocess
now = datetime.datetime.now()

# for testing timie format
# print (now.strftime(("%m%d%y"))
#print (now.strftime("%m%d%y"))
strFileExt = "/var/logs/error.log."+(now.strftime("%m%d%y"))
print strFileExt

what = " reported errors in the "
where = strFileExt
print what
print where

p = subprocess.call(["grep -rlw ", what, where])
strFile=p.stdout
print strFile
whether I use p.stdout or try to stuff it in a variable as above, the error is the same, shown below:

/var/logs/error.log.112219
 reported errors in the
/var/logs/error.log.112219
Traceback (most recent call last):
  File "./integ_recheck.py3", line 25, in <module>
    p = subprocess.call(["grep -rlw ", what, where])
  File "/usr/lib64/python2.7/subprocess.py", line 524, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/usr/lib64/python2.7/subprocess.py", line 711, in __init__
    errread, errwrite)
  File "/usr/lib64/python2.7/subprocess.py", line 1327, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory



RE: Capture grep output to a variable which includes another variable - scidam - Nov-22-2019

(Nov-22-2019, 02:22 PM)kdefilip2 Wrote: Scidam, that looked promising, but getting error.
You should split each command and pass these commands as a list, e.g.
p = subprocess.call(["grep", "-rlw", what, where])



RE: Capture grep output to a variable which includes another variable - kdefilip2 - Nov-24-2019

Hi Scidam,

Thanks for all your help. The only way I could get this working was with the following:
p = Popen(["grep", "-wl", what, where], stdout=True, stderr=True)
p.communicate()[0]
It now returns proper grep output, i.e., when found it returns the filename, when not found, it returns nothing.

I now need to find a way to compare the result:
IF Found
do a bunch of other stuff
ELSE
Exit

But I guess that will be for another post.

Thanks again.

kd