如何在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我的错误,我认为该评论是针对我的。我道歉。