Back

Explore Courses Blog Tutorials Interview Questions
+2 votes
2 views
in Python by (50.2k points)

There is a file (query.txt) which has some keywords/phrases which are to be matched with other files using grep. The last three lines of the following code are working perfectly but when the same command is used inside the while loop it goes into an infinite loop or something(ie doesn't respond).

import os

f=open('query.txt','r')

b=f.readline()

while b:

    cmd='grep %s my2.txt'%b    #my2 is the file in which we are looking for b

    os.system(cmd)

    b=f.readline()

f.close()

a='He is'

cmd='grep %s my2.txt'%a

os.system(cmd)

1 Answer

+2 votes
by (108k points)
edited by

First of all, you are not iterating over the file properly. You can simply use for b in f: without the .readline() stuff.

Then your code will blow in your face as soon as the filename contains any characters which have a special meaning in the shell. Use subprocess.call instead of os.system() and pass an argument list.

Here's a fixed version:

import os

import subprocess

with open('query.txt', 'r') as f:

    for line in f:

        line = line.rstrip() # remove trailing whitespace such as 'n'

        subprocess.call(['/bin/grep', line, 'my2.txt'])

However, you can improve your code even more by not calling grep at all. Read my2.txt to a string rather and then use the re module to perform the search. In case you do not need a regex at all, you can even simply use if a line in my2_content.

To know more about this you can have a look at the following video:-

Related questions

0 votes
1 answer
asked Oct 15, 2019 in Python by Sammy (47.6k points)
0 votes
1 answer
0 votes
1 answer
asked Nov 26, 2020 in Python by ashely (50.2k points)
0 votes
1 answer

Browse Categories

...