Ваш grepcut
проверяет только первую строку: если она совпадает, возвращается output
, в противном случае она немедленно возвращает None
, не переходя к следующей итерации.
Возможно, вы хотите удалить эту ветку else
и переместить return None
после for
.
def grepcut(inputRaw, grep, delimit, field):
for line in inputRaw:
if grep in line:
output = line.split(delimit)[field]
return output
return None
Вы можете даже опустить return None
, так как в Python любая функция, которая завершается без явного return
, возвращает None
, однако я бы оставил его, чтобы было ясно, что это не надзор, а функция Ожидается, что вернет None
, если ничего не найдет.
Кроме того, вы звоните communicate()
через Popen
, поэтому вы получаете строку , а не файловый объект; следовательно, вы не можете выполнять итерации по ее строкам, как это - итерации по строке итерируют по ее символам.
Если inputRaw
действительно строка, вы должны разделить ее на новые строки, например:
def grepcut(inputRaw, grep, delimit, field):
for line in inputRaw.split('\n'):
if grep in line:
output = line.split(delimit)[field]
return output
return None