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)

但是,当尝试将代码作为线程运行时,执行 shell 命令时,我不断收到 OSError: [Errno 32] Broken Pipe。

我怀疑问题是试图同时通过不同的线程访问 STDIN 和 STDOUT?有什么方法可以使这个线程安全吗?

我正在使用线程模块如下:

import thread
t = thread.start_new_thread( senddata, (mac, interval)
4

0 回答 0