管道发送和接收。 unpack需要长度为4的字符串参数

时间:2017-07-10 03:41:50

标签: python struct pipe

明白这个qn已经被问到了。但是通过前一个帖子提供的答案,我仍然无法让我的程序运行。

#!/usr/bin/env python
import pika
import os
import sys
import time
import struct
path= "pipe"

fifo=open(path,'r')
while True:
    var=fifo.read()
    if var:
      if len(var) == 8:
        print struct.unpack("<l", var)[0]
      print len(var)

我想从我的烟斗中读取。我有一个c ++程序向管道发送8字节的结构。如果我要改变c ++程序只发送一个长数据类型(4个字节),如果len(var)== 8:如果len(var)== 4:我改变,我可以正确获取我的数据。但是,如果我发送一个8字节(2长数据类型)的结构,我将收到一个错误。

非常感谢大家的帮助。谢谢。

1 个答案:

答案 0 :(得分:1)

对于8字节有符号长数据类型,您需要使用&#39; q&#39;格式字符,而不是&#39; l&#39;字符。

格式代码显示在documentation

的第7.3.2.2节中

运行此代码作为一个简单示例,它以4或8字节签名长发送,并在收到时检查长度并使用相应的代码:

import os
import struct

pipein, pipeout = os.pipe()

#txdata = struct.pack("<l", 12345)
txdata = struct.pack("<q", 12345)
print len(txdata)

os.write(pipeout, txdata)

var = os.read(pipein, 1024)
print len(var)
if (len(var) == 4):
    print struct.unpack("<l", var)[0]
if (len(var) == 8):
    print struct.unpack("<q", var)[0]