Код subprocess
будет примерно эквивалентен.
output = subprocess.check_output(
'''sed -n /%s/,/%s/p %s | grep "Invalid Credentials"''' % (st_time, en_time, fileName),
shell=True)
Вывод записывается в переменную, а не выводится на стандартный вывод вне контроля Python.Если все, что вам нужно, это print
, продолжайте и сделайте это.
Это вызовет исключение, если grep
ничего не найдет.Вы можете перехватить его с помощью except
, если хотите так или иначе обработать этот угловой случай.
Однако вы можете легко заменить все это на собственный код Python.
with open(fileName, 'r') as input:
between = False
output = []
for line in input:
if st_time in line:
between = True
if between and 'Invalid Credentials' in line:
output.append(line)
if en_time in line:
between = False
output
в этом случае является списком.Каждая захваченная строка все еще содержит завершающий символ новой строки.(Легко исправить, если это не то, что вам нужно, конечно.)
В качестве оптимизации вы можете break
, когда увидите en_time
(хотя тогда сценарий не будет в точности эквивалентен sed
script).
Это также должно быть легко адаптировано к сценарию, где st_time
не встречается точно в файле журнала.Вам нужно будет проанализировать отметку времени в каждой строке, а затем просто начать обработку, когда проанализированная отметка даты равна или больше значения (проанализировано) st_time
.Точно так же анализируйте en_time
и выходите, когда вы видите записи журнала с отметками времени, равными или превышающими это значение.