![](/img/trans.png)
[英]EmptyDataError while writing and reading from temporary file in Python
[英]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.