2

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)
4

0 に答える 0