[英]Ubuntu: Pipe raw unbuffered data to TCP port
我的總體目標:我有一個硬件設備,可以將傳感器數據流式傳輸到運行 Python 腳本的 Ubuntu 筆記本電腦。 數據每 2 秒以 240 個樣本塊(每行一個,帶有 \n)的形式出現,並打印到標准輸出。 I start the Python script on the Ubuntu laptop and pipe its output to a TCP port using netcat. 我從網絡上的任何其他設備連接到 TCP 端口並獲取實時數據 stream -無需先加載所有先前的樣本。
我的設置:兩台筆記本電腦。
1:Ubuntu 從傳感器收集讀數,並將這些讀數通過管道傳輸到 TCP 端口 1234。(這是有效的。) $ py read_sensors.py | nc -lk 1234
$ py read_sensors.py | nc -lk 1234
2:Windows 10,具有 WSL、Python 以及用於處理從第一台筆記本電腦流式傳輸的數據的現有腳本。 (這在 WSL 中工作) $ nc 10.10.10.01 1234
我的問題:我開始在 Ubuntu 筆記本電腦上傳輸傳感器數據。 10 分鍾后,我從我的 windows 筆記本電腦連接到 stream ......
我希望在建立連接時收到最新的樣本,以及(偽)實時的所有后續樣本。
相反,一旦我連接上,我就會被從 Ubuntu 筆記本電腦上開始流式傳輸管道以來收集的所有樣本淹沒,一旦它趕上,我就開始看到實時數據。
我試過了:搜索讓我嘗試了stdbuf。 缺乏結果導致我嘗試了$ stdbuf -oL py read_sensors.py | nc -lk 1234
的各種組合。 $ stdbuf -oL py read_sensors.py | nc -lk 1234
$ py read_sensors.py | stdbuf -oL nc -lk 1234
$ py read_sensors.py | stdbuf -oL nc -lk 1234
但每次我稍等片刻,然后從我的 windows 筆記本電腦連接到端口,它就會加載從我開始在 Ubuntu 筆記本電腦上流式傳輸時開始的所有樣本。
我假設:這是一個緩沖問題,必須在 Ubuntu 機器上修復 - 但 stdbuf 的各種組合對系統的行為沒有任何影響。 所以,我轉向 SO 神尋求洞察力和恩典:)
-缺口
這樣的事情可能會達到總體目標。 基於https://docs.python.org/3/library/socketserver.html#socketserver-tcpserver-example
import socketserver
class MyHandler(socketserver.BaseRequestHandler):
def handle(self):
bytes = read_sensor_data() # call the code that reads the sensors
self.request.sendall(bytes)
if __name__ == "__main__":
with socketserver.TCPServer(("localhost", 1234), MyHandler) as server:
server.serve_forever()
禁用 netcat 緩沖:
或者,我相信如果您使用 bash 內置的 tcp 連接繞過 netcat,它將起作用。 例如 read_sensors.py > /dev/tcp/10.10.10.1/1234
編輯:添加了顯示如何發送和接收的示例代碼。
示例代碼:
發送:
#!/bin/bash
while true
do
date > /dev/tcp/localhost/1234 || true # replace date command with read_sensors.py
sleep 1
done
受到:
ubuntu@ubuntu:~$ nc -lk 1234
Output:
Tue Mar 2 20:40:24 UTC 2021
Tue Mar 2 20:40:25 UTC 2021
Tue Mar 2 20:40:26 UTC 2021
Tue Mar 2 20:40:27 UTC 2021
^C
ubuntu@ubuntu:~$ nc -lk 1234
Tue Mar 2 20:40:40 UTC 2021
Tue Mar 2 20:40:41 UTC 2021
當我點擊控制 C 時,請注意 13 秒的間隙,沒有數據發送或緩沖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.