subprocess モジュールを使用してコマンドを実行し、メソッドを通信して stdin 入力をコマンドに渡します。これは、スレッドとしてではなく、スタンドアロンで実行する場合にうまく機能します。
cmd = ["/usr/bin/nc", "-w0", "-u", hostname, port]
while count <= interval:
j = 0
while j < burst:
p1 = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE).communicate(json.dumps(data))
time.sleep(0.01)
j = j + 1
count = count+1
time.sleep(1)
ただし、コードをスレッドとして実行しようとすると、シェル コマンドの実行時に OSError: [Errno 32] Broken Pipe が発生し続けます。
問題は、異なるスレッドで同時に STDIN と STDOUT にアクセスしようとしていると思われますか? このスレッドを安全にする方法はありますか?
次のようにスレッドモジュールを使用しています:
import thread
t = thread.start_new_thread( senddata, (mac, interval)