相关疑难解决方法(0)

从经常更新的文件中读取

我目前正在Linux系统上用python编写程序.目标是在找到特定字符串时读取日志文件并执行bash命令.日志文件由另一个程序不断写入.我的问题是:

如果我使用open()方法打开文件,我的Python文件对象会在实际文件被其他程序写入时更新,还是我必须按时间间隔重新打开文件?

谢谢

吉姆

更新:到目前为止,感谢您的答案.我或许应该提到该文件是由Java EE应用程序编写的,因此我无法控制何时将数据写入其中.我目前有一个程序每隔10秒重新打开一次该文件,并尝试从它上次读取的文件中的字节位置读取.目前它只打印出返回的字符串.我希望文件不需要重新打开,但是read命令可以以某种方式访问​​Java应用程序写入文件的数据.

#!/usr/bin/python
import time

fileBytePos = 0
while True:
    inFile = open('./server.log','r')
    inFile.seek(fileBytePos)
    data = inFile.read()
    print data
    fileBytePos = inFile.tell()
    print fileBytePos
    inFile.close()
    time.sleep(10)
Run Code Online (Sandbox Code Playgroud)

感谢pyinotify和发电机的提示.我打算看看这些更好的解决方案.

python file-io fopen

49
推荐指数
3
解决办法
5万
查看次数

从日志文件中读取,因为它是使用python编写的

我正试图找到一种使用python实时读取日志文件的好方法.我想在写入时一次处理一个日志文件中的行.不知何故,我需要继续尝试读取文件,直到它被创建,然后继续处理行,直到我终止进程.有没有合适的方法来做到这一点?谢谢.

python file-io logging monitoring file

47
推荐指数
3
解决办法
5万
查看次数

Python 记录器文件权限

Ubuntu 服务器 16.04.5 LTS

我有一个 python 脚本,它使用以下代码创建日志文件:

today = datetime.today()
datem = datetime(today.year, today.month, today.day)
logger = logging.getLogger('processImport')
hdlr = logging.FileHandler('{0}myLog_{1}-{2}-{3}.log'.format(myLogFileLocation, datem.year, datem.month, datem.day))
formatter = logging.Formatter('%(asctime)s %(levelname)s %(message)s')
hdlr.setFormatter(formatter)
logger.addHandler(hdlr) 
logger.setLevel(logging.INFO)
Run Code Online (Sandbox Code Playgroud)

保存日志条目:

logger.info(logMessage)
Run Code Online (Sandbox Code Playgroud)

然后我有一个 cron 作业,它通过执行一个os.remove(fullFilePath)用于删除文件的 python 文件在一段时间后删除旧的日志文件。

但是,执行此 cron 作业时出现权限错误。

OSError: [Errno 13] Permission denied: PathToTheFile\theLogFileName.log
Run Code Online (Sandbox Code Playgroud)

当我检查文件的权限时,它们被设置为:

-rw-r--r-- 1 www-data www-data etc etc
Run Code Online (Sandbox Code Playgroud)

我需要做什么才能使 cron 作业有权删除日志文件?

谢谢你。

python logging

4
推荐指数
1
解决办法
8992
查看次数

标签 统计

python ×3

file-io ×2

logging ×2

file ×1

fopen ×1

monitoring ×1