Python - 尾部日志文件并比较阻塞和非阻塞尾部函数
本篇文章概述了 Python 中的 tail() 函数,介绍了它的工作原理并演示了如何尾部日志文件。
它还比较了 Python 的阻塞和非阻塞尾部函数并强调了差异。
Python tail() 函数概述
在 Python 中,使用 tail()
函数时默认显示数据框的最后五行。 只有一个输入参数,即行数。
此选项允许我们显示特定数量的行。 此外,tail()
函数还接受负数,如下例所示。
在这种情况下,将返回所有行,但不返回第一行。 head()
和 tail()
之间的主要区别在于,当传递空参数时,head()
和 tail()
都返回五行。
请记住,head()
和 tail()
函数生成有序数据,而 sample()
生成无序数据。
tail()
函数的语法:
dataframe.tail(n=5)
Python 中 Tail() 函数的工作原理
如果我们将 n 的负值传递给 tail()
函数,它将排除第一个 n (请参见以下示例)。
当我们运行 print(df.tail(2))
时,它显示最后两行,当我们执行 print(df.tail(-6))
时,它显示除前 6 行之外的所有行。
示例代码:
import pandas as pd
df = pd.DataFrame({'Colours': ['Purple', 'White', 'Black', 'Brown',
'Pink', 'Orange', 'Blue', 'Red', 'Yellow']})
print("Complete Data Frame:")
print(df)
print("When we pass the value of `n`:")
print(df.tail(2))
print("\nWhen we pass the -ve value of `n`:")
print(df.tail(-6))
输出:
Complete Data Frame:
Colours
0 Purple
1 White
2 Black
3 Brown
4 Pink
5 Orange
6 Blue
7 Red
8 Yellow
When we pass the value of `n`:
Colours
7 Red
8 Yellow
When we pass the -ve value of `n`:
Colours
6 Blue
7 Red
8 Yellow
用 Python 跟踪日志文件
我们创建了一个名为 std.log 的日志文件,在其中存储了一些数据,我们将在下面的输出中看到这些数据。 要跟踪日志文件,我们可以从 sh 模块运行 tail。
为了执行无限循环并显示输出行,我们调用 tail()
,并将文件名和 _iter
设置为 True。
示例代码:
from sh import tail
for line in tail("-f", "std.log", _iter=True):
print(line)
输出:
2022-08-25 21:44:10,045 This is just a reminder
2022-08-25 21:44:10,046 Meeting is at 2 pm
2022-08-25 21:44:10,046 After the lunch break
请记住,文档说 sh 仅在类似 Linux 的操作系统上受支持。 值得注意的是,不支持 Windows。
Python 中的阻塞与非阻塞 Tail() 函数
让我们从非阻塞 tail() 函数开始。
非阻塞 Tail() 函数
当某个功能被阻止时,它可能会推迟后续活动的完成。 此外,我们可能会影响系统的整体性能。
换句话说,您的程序将阻止并阻止其他任何程序运行。 为了启动子进程并连接到其输出流,我们使用子进程模块(stdout)。
示例代码:
import subprocess
import select
import time
f = subprocess.Popen(['tail','-F',"log.txt"],
stdout=subprocess.PIPE,stderr=subprocess.PIPE)
p = select.poll()
p.register(f.stdout)
while True:
if p.poll(1):
print(f.stdout.readline())
time.sleep(1)
输出:
b'2022-08-25 21:44:10,045 This is just a reminder\n'
阻塞 Tail() 函数
以下代码还将在添加新行时显示它们,但您可以使用 subprocess 模块而无需额外的 select 模块调用。 它会阻塞,直到使用 f.kill() 命令终止 tail 程序。
示例代码:
import subprocess
f = subprocess.Popen(['tail','-F',"log.txt"],
stdout=subprocess.PIPE,stderr=subprocess.PIPE)
while True:
line = f.stdout.readline()
print(line)
输出:
b'2022-08-25 21:44:10,045 This is just a reminder\\n'
b'2022-08-25 21:44:10,046 Meeting is at 2 pm\\n'
上述示例的日志文件
以下代码用于创建 log.txt,然后在阻塞和非阻塞代码中使用它。
示例代码:
import logging
logging.basicConfig(filename="log.txt", level=logging.DEBUG,
format="%(asctime)s %(message)s")
logging.debug("This is just a reminder")
logging.info("Meeting is at 2 pm")
logging.info("After the lunch break")
输出:
2022-08-25 21:44:10,045 This is just a reminder
2022-08-25 21:44:10,046 Meeting is at 2 pm
2022-08-25 21:44:10,046 After the lunch break
相关文章
逐行分析 Python 代码
发布时间:2023/06/26 浏览次数:115 分类:Python
-
本文介绍了如何逐行分析 Python 代码并获取有关代码执行的有用信息。首先,我们简单介绍一下profiling; 然后,我们将讨论何时使用逐行分析比使用函数基础分析更好。
Python 中的 MIMEMultipart
发布时间:2023/06/26 浏览次数:186 分类:Python
-
在本文中,我们将了解如何在 Python 及其 MIME(多用途互联网邮件扩展)模块的帮助下发送带有附件的电子邮件的有效方法。Python 的 MIMEMultipart、MIMEText 和 MIMEBase 模块
Python 中的自动 ARIMA
发布时间:2023/06/26 浏览次数:127 分类:Python
-
在本文中,我们将了解 Python 中的 Auto ARIMA 及其工作原理。Python 中的自动 ARIMA pmdarima 库中的 auto_arima() 函数有助于确定 ARIMA 模型的最佳参数,并提供拟合的 ARIMA 模型作为结果。
Python 中的方差膨胀因子
发布时间:2023/06/26 浏览次数:93 分类:Python
-
本文介绍了方差膨胀因子 (VIF) 及其在检测有影响的观测值方面的性能,并演示了如何使用 statsmodels 在 Python 中使用 VIF。Python 中的方差膨胀因子
在 Python 中跨多个文件使用全局变量
发布时间:2023/06/26 浏览次数:90 分类:Python
-
这个简单的指南是关于在 Python 中跨多个文件使用全局变量的。 但在进入主题之前,我们先简要了解一下全局变量及其在多个文件中的使用。Python 中的全局变量
基于 Python 中的值对计数器进行排序
发布时间:2023/06/26 浏览次数:165 分类:Python
-
本篇文章介绍如何使用 Python 根据计数器的值对计数器进行排序。Python 计数器概述 计数器是 Python 中集合模块的一部分,可帮助计算特定字符出现的总数。
在Python中发送UDP数据包
发布时间:2023/06/26 浏览次数:92 分类:Python
-
今天,我们将学习用户数据报协议(UDP),并了解如何使用 Python 编程发送 UDP 数据包。在Python中发送UDP数据包
Python 自定义迭代器
发布时间:2023/06/26 浏览次数:119 分类:Python
-
在本文中,我们将了解什么是迭代器以及如何借助 __iter__ 和 __next__ 类方法创建自定义迭代器。 我们还将学习如何在 Python 生成器的帮助下创建自定义迭代器。借助 Python 中的类方法 __iter__ 和
Python 高斯核
发布时间:2023/06/26 浏览次数:161 分类:Python
-
高斯核是一种高通滤波器,是图像处理中最常用的滤波器之一。 它也用于机器学习。 本博客将介绍该内核以及如何使用它。