Я использую подпроцесс модуля для вызова команды grep, где я хочу узнать, в какой строке находится слово, вставленное пользователем, и в каком файле.
Для этого я использую параллельный поиск, где создаются потоки. Количество потоков определяется пользователем, если количество потоков больше, чем количество файлов, они делятся. Таким образом, каждый поток будет читать новые созданные файлы с одинаковым размером.
В первых нескольких файлах слово встречается, но не в каждом файле, хотя некоторые из них содержат одно и то же слово.
Выход
import subprocess
import threading
(...)
def t_function(args):
"""
Uses the grep system command using a parallel search for a word inserted by the user in multiple files.
Requires: args list, with all the files from the user input.
Ensures: Number of lines in which the word is found as well as its file.
"""
global contadorFiles
contadorFiles+=1
out = subprocess.Popen(['grep', '-nr', text, args], stdout=subprocess.PIPE)
otp = []
for line in out.stdout:
print(line)
otp.append(line.decode("utf-8").split(":"))
if otp == []:
print("Not found in "+args, threading.currentThread().getName())
for i in range(len(otp)):
finalN = otp[i][0]
print('"' + text + '"' + " Found on line " + finalN + " in file " + args, threading.currentThread().getName())