![脚本太慢?有什么特别的原因吗?](https://linux22.com/image/7061/%E8%84%9A%E6%9C%AC%E5%A4%AA%E6%85%A2%EF%BC%9F%E6%9C%89%E4%BB%80%E4%B9%88%E7%89%B9%E5%88%AB%E7%9A%84%E5%8E%9F%E5%9B%A0%E5%90%97%EF%BC%9F.png)
我有一个脚本,它与管道命令一起执行十六进制转储,最后我将其重定向到一个文件。现在我正在记录来自 Raspberry Pi 串行端口的数据。我还从 shell 脚本调用 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 "."
}