pipeコマンドを使用して16進ダンプを実行し、最後にそれをファイルにリダイレクトするスクリプトがあります。今、私はRaspberry Piシリアルポートからデータを記録しています。また、シェルスクリプトからPythonスクリプトを呼び出します(時間をミリ秒単位で表示)。コマンドを実行した後、画面にデータが表示されるまでに約5分かかります。
timeout 2s ./ExpHmax
while :
do
sudo hexdump -v -e '1/1 "%02x\n"' /dev/ttyUSB0 | awk '$1=="ed" {
getline byte1
getline byte2
number = strtonum("0x" substr(byte2,2,1))+2
"./Time.py" |& getline timestamp;
data = ":: "timestamp " ::ED." byte1"."byte2
while(number-->0)
{getline byte; data = data"."byte}
print data"."
}' | tr '[a-z]' '[A-Z]'| grep -v '^.....................00' > Thur.log
done
パイプラインを実行せずにこのスクリプトを実行する方法を提案できる人はいますか?それのために遅延が発生したようです。これは私のPythonスクリプトです。
import time
millis = int(round(time.time() * 1000))
print millis
答え1
一致するすべてのバイト(!)でPythonをインスタンス化しないことから始めることができます。
#!/usr/bin/awk -f
function de() {
getline < "/proc/uptime"
close("/proc/uptime")
return $0
}
BEGIN {
ec = de()
}
$0 == "ed" {
getline byte1
getline byte2
number = strtonum("0x" substr(byte2, 2, 1)) + 2
data = ":: " de() - ec " ::ED." byte1 "." byte2
while (number--) {
getline byte
data = data "." byte
}
print data "."
}