def duqnc(): #读取共享内存
SHMEMSIZE = 500000#len(str)
file_name = "coco"
# python读取共享内存
shmem = mmap.mmap(0, SHMEMSIZE, file_name, mmap.ACCESS_READ)
print(shmem.read(SHMEMSIZE).decode('ASCII'))
shmem.close()
return
File "J:\dll\yolov5\yolov5\tesrxxx.py", line 9, in duqnc
shmem = mmap.mmap(0, SHMEMSIZE, file_name, mmap.ACCESS_READ)
PermissionError: [WinError 5] 拒绝访问。
我想易语言和python数据传输,于是就用了mmap
但发现个问题,传输小一点的数据,可以正常使用,但是易语言那边写入一个图片字节集数据时,python这边读取,就会报错,拒绝访问,请问有什么解决办法吗。
、下面是易语言的代码
易语言这边其实很简单,就调用了两个API
我主要不明白python这边,拒绝访问怎么解决 或者有什么其他办法可以实现,易语言端传输图片字节集到python UDP我试过了,数据大一点就传不过来 还慢
供参考:https://zhuanlan.zhihu.com/p/166330573
https://www.codingdict.com/questions/164229
第二个参数SHMEMSIZE指代的是字节数,以500000为例,那就是500000/1024/1024=0.47MB,的确是比较小,所以大文件一定要把设置到足够大才行。
添加个for循环,每次读取1024个字节呢?
mmap()的第一个参数应该为fd,你指定了0,代表标准输入,不确定你成功的情况是怎么样的,理论来说不应该读取到coco文件的内容
第二个参数为映射文件长度,指定0代表文件大小,或者显示指定文件的大小。指定一个大于文件大小的值,如果大于一个pagesize会报错。
所以你试试下面的代码
def duqnc():
file_name = "coco"
fd = os.open(file_name, os.O_RDONLY)
size = os.lseek(fd, 0, os.SEEK_END)
# python读取共享内存
shmem = mmap.mmap(fd, size, None, mmap.ACCESS_READ)
print(shmem.read(size).decode("utf-8"))
shmem.close()
os.close(fd)
return