使用 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)