Я нашел Popen выше лучшим решением. Это быстро и грязно, и это работает. Для python 2.6 на машине Unix я использовал следующий
def GetLastNLines(self, n, fileName):
"""
Name: Get LastNLines
Description: Gets last n lines using Unix tail
Output: returns last n lines of a file
Keyword argument:
n -- number of last lines to return
filename -- Name of the file you need to tail into
"""
p=subprocess.Popen(['tail','-n',str(n),self.__fileName], stdout=subprocess.PIPE)
soutput,sinput=p.communicate()
return soutput
soutput будет содержать последние n строк кода. выполнить итерацию по строке soutput line:
for line in GetLastNLines(50,'myfile.log').split('\n'):
print line
and_then
должно возвращать будущее или что-то, что может быть преобразовано в будущее через черту IntoFuture
. Вы возвращаете res.into_body()
, который не является будущим - это на самом деле поток .
Чтобы это сработало, вам нужно преобразовать этот поток в будущее, которое представляет полностью прочитанное тело. Здесь доступно несколько вариантов:
res.into_body().concat2()
, который объединяет все считанные байты в один буфер res.into_body().collect()
, который собирает все куски байтов в Vec
res.into_body().into_future()
, который преобразуется в кортеж, содержащий первый элемент из потока и оставшуюся часть самого потока (то есть (T, Stream<Item = T>)
)