私はPythonにとても慣れていません...それは好きですが、奇妙な問題を抱えています。ここにいくつかのコードがあります:
def run(self):
print("receiver starting")
while self.receiving:
print("RX loop")
try:
print("RX: waiting for PDU from peer")
data, addr = self.rx_socket.recvfrom(32)
print("RX: received %d bytes"%(len(data)))
print("RX: self.receiving=%d"%(self.receiving))
print("XXXX RX: 0x%s"%(data.hex()))
# condition seems to be true but block not entered
if self.receiving == 1 & len(data) > 0:
my_pdu = 0
print("ZZZZ RX: 0x%s"%(data.hex()))
ご覧のとおり、ソケットから読み取るスレッドでループが実行されています。次に、このテスト出力を見てください。
RX loop
RX: waiting for PDU from peer
RX: received 3 bytes
RX: self.receiving=1
XXXX RX: 0x022000
ZZZZ RX: 0x022000
RX loop
RX: waiting for PDU from peer
RX: received 8 bytes
RX: self.receiving=1
XXXX RX: 0x100100ffff020028
RX loop
RX: waiting for PDU from peer
私の最初の読み取りは3バイトを返し、予想どおり、ifブロックの外側にXXXXプレフィックス付きのprintステートメントと、ifブロック内のZZZZプレフィックス付きステートメントの両方が表示されます。
2回目の読み取りは8バイトを返し、XXXXプレフィックス行を出力しますが、条件(self.receiveing == 1&len(data)> 0)がXXXXより前の出力値に従って両方とも真であるにもかかわらず、ifブロックには入りません。ライン。
私のスレッドは終了していません。そうでないと、「RXループ」の行が再び表示されません。
経験豊富なPythonの人の誰かが、私がここで間違ったことを教えてくれますか?
ありがとうございました
問題は、それ&
がビット単位であり、論理積が必要なことです。これはand
次のとおりです。
if self.receiving == 1 and len(data) > 0:
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加