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 strFilewhether 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 |