如何在def-python之间传递数据

如何在def-python之间传递数据,python,Python,我不确定我是不是在用正确的方法来做这件事,所以任何建议都是好的 基本上我有这个代码: def recvCell(sock, waitFor = 0): while True: hdr = sock.recv(3) circid, cmd = struct.unpack(">HB", hdr[0:3]) ln = 509 if cmd == 7 or cmd >= 128: ln = str

我不确定我是不是在用正确的方法来做这件事,所以任何建议都是好的

基本上我有这个代码:

def recvCell(sock, waitFor = 0):
    while True:
        hdr = sock.recv(3)
        circid, cmd = struct.unpack(">HB", hdr[0:3])
        ln = 509
        if cmd == 7 or cmd >= 128:
            ln = struct.unpack(">H", sock.recv(2))[0]
        pl = sock.recv(ln)

        if cmd == waitFor or waitFor == 0:
            return { 'circId': circid, 'cmd': cmd, 'len': ln, 'pl': pl}

# builds a cell
def buildCell(circid, command, payload):
    cell = struct.pack(">HB", circid, command)
    if command == 7 or command >= 128:
        cell += struct.pack(">H", len(payload))
    else:
        payload += "\x00" * (509 - len(payload))

    cell += payload
    return cell

# builds the version cell's payload
def buildVersions(acceptVersions):
    pkt = ''
    for v in acceptVersions:
        pkt += struct.pack(">H", v)
    return pkt

verPl = buildVersions([ 3 ])
verCell = buildCell(0, 7, verPl)

print "Packet to send is : ", verCell
ssl_sock.send(verCell)

srv_netinfocell = recvCell(ssl_sock, 8)
#process netinfo cell here
print srv_netinfocell

def decodNetInfo(pl):
    payload = pl
    tm = struct.unpack(">L", payload[0:4])
    our_or_ip_version = struct.unpack(">B", payload[4])[0]
    our_or_addr_len = struct.unpack(">B", payload[5])[0] 
    return{}
        if our_or_addr_len == 4:
        our_op_ip = struct.unpack(">BBBB", payload[6:10]) 
        our_ip_version = 4
        num_their_ips = struct.unpack(">B", payload[10])[0]
        len_their_ips = struct.unpack(">b", payload[12][0]
它发送一个数据包,然后接收它

我想关注的是decodNetinfo位

这里我想做的是调用它,如果它接收的数据包是cmd==8,则从
recvCell
函数中检索
pl

如何将此数据从recvCell传递到decodNetInfo

谢谢

编辑::

def recvCell(sock, waitFor = 0):
    while True:
        hdr = sock.recv(3)
        circid, cmd = struct.unpack(">HB", hdr[0:3])
        ln = 509
        if cmd == 7 or cmd >= 128:
            ln = struct.unpack(">H", sock.recv(2))[0]
        pl = sock.recv(ln)

        if cmd == waitFor or waitFor == 0:
            return { 'circId': circid, 'cmd': cmd, 'len': ln, 'pl': pl}

def decodeNetInfo(pl):
    return  "in decode net info"
    return { 'pl': pl}


srv_netinfocell = recvCell(ssl_sock, 8)
decodeNetInfo(srv_netinfocell['pl'])
#process netinfo cell here
print srv_netinfocell
我已经这样做了,但是没有从decode netinfo获得两个返回语句。有什么想法吗?谢谢

以下是recvCell()的返回字典

return { 'circId': circid, 'cmd': cmd, 'len': ln, 'pl': pl}
因此,在调用函数后,只需将该键传递给字典即可获得值

srv_netinfocell = recvCell(ssl_sock, 8)
decodNetInfo(srv_netinfocell['pl'])

你能复习一下你的缩进吗?
返回{}
(为什么返回空字典?)之后的所有内容都应该在函数中吗?它永远不会在那里运行。你尝试了什么!它出了什么问题?revCell中的所有内容都很好并且正常工作,显示了正确的结果,但是当我尝试传递值pl时,我没有从decodeNetInfo函数获得任何响应,因此我不确定它是否被调用用于一件事,您只能从该函数返回一次;第二个永远不会跑。另一方面,您不会对返回的值执行任何操作。你需要分配它;它不会神奇地变异
srv\u netinfo cell
。我建议您阅读,同样,您当前的代码没有什么意义。谢谢,这就是我所说的。但是,现在我没有从decodeNetInfo获取返回值,它是否被调用?@user2962401如果您有其他问题,请单击按钮提问。@Veedrac我的错误,我认为该评论是针对我的。我道歉。