스크립트가 너무 느리나요? 특별한 이유가 있나요?

스크립트가 너무 느리나요? 특별한 이유가 있나요?

파이프 명령을 사용하여 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 "."
}

관련 정보