繁体   English   中英

在python中读取文件时写入C中的文件

[英]Writing to a file in C while reading from it in python

我正在使用Altera DE1-SoC板,我正在使用C程序从传感器读取数据。 数据在while循环中连续读取并写入文本文件。 我想使用python程序读取这些数据并显示数据。

问题是我不确定如何在文件的读/写期间避免冲突,因为这些需要同时发生。 我正在考虑创建一个互斥体,但我不确定如何实现它,因此两种不同的程序语言可以使用它。

有一个简单的方法吗? 谢谢。

您可以使用cdll.LoadLibrary将C库加载到Python中,并调用函数以获取C互斥锁的状态。 然后在Python中如果C互斥锁是锁定然后不读,如果它被解锁则它可以读取。

只要您可以打开该文件两次(一个用于读取,一个用于写入),操作系统将处理此问题。 只记得从C代码中刷新以确保您的数据实际写入磁盘,而不是保存在内存中的缓存中。

我不确定你的冲突是什么意思。 我假设它是一条线被分成两半,因为一个进程开始写入,另一个进程中断它并开始读取。

您可以使用pyinotify (0.9.6)包来监视您感兴趣的日志文件以进行修改事件。 假设唯一的修改是追加操作,您可以使用如下代码:

import pyinotify
import functools

wm = pyinotify.WatchManager()
notifier = pyinotify.Notifier(wm, default_proc_fun=lambda _e: _e)
wm.add_watch('/home/user/somefile', pyinotify.IN_MODIFY)

def my_read_routine(notifier, fd):
    while True:
        content = fd.readline()
        if not content:
            break
        print(content, end = '')

read_callback = functools.partial(my_read_routine, fd=open('somefile', 'r'))

notifier.loop(callback=read_callback)

default_proc_fun这个神秘的lambda只是一个虚拟替换,用于删除默认处理例程,该例程将事件打印到stdout。 从参数列表中删除它,看看我的意思。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM