shunbourianの日記

SEをやっているリーマンのブログ。好きなお酒とか、読んだ本とか、いろいろ。

Python3 メモ

ディレクトリ以下の再帰的探索方法

import glob

# test_dir以下を再帰的に探索
for f in glob.glob('test_dir/**', recursive=True):
    print(f)

スリープ処理

python3でのスリープ処理。精度は何msオーダーになるんだろう?

import time

# 引数が秒数
time.sleep(1)

# 500msを与える
time.sleep(0.5)

UDPでの送受信

UDPでの送受信がしたいときは、以下のように書くと簡単にできる。
ちなみに同期する必要はないので、ノンブロッキングの引数0。

クライアント側(送信側)

"""

UDPの送信プログラム

"""

import socket

# 送信先アドレス指定(自分自身)
DESTADDR = "127.0.0.1"

# 送信先アドレス指定(てきとう)
DESTPORT = 12345

# 送信データの内容を指定
# Python3系では文字列リテラルの前にバイナリのbを指定する必要あり
SENDMSG = b"send to server"

# ソケットオブジェクト生成
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

for i in range(3):
    # SENDMSGの内容を送信先に送信。とりあえず3回送信。
    s.sendto(SENDMSG, (DESTADDR, DESTPORT))

サーバ側(受信側)

"""

UDP受信プログラム

"""


import socket

BINDADDR = ""
BINDPORT = 12345

# ソケットオブジェクト生成
s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)

# 待受インタフェースとポート指定
s.bind((BINDADDR, BINDPORT))

# ノンブロッキングモードで待受
s.setblocking(0)

while True:
    try:
        data, addr = s.recvfrom(10240)

    except socket.error:
        pass

    else:
        print("Receive addr:{}, data:{}".format(addr[0], data))

実行結果

Receive addr:127.0.0.1, data:b'send to server'
Receive addr:127.0.0.1, data:b'send to server'
Receive addr:127.0.0.1, data:b'send to server'