2分以内に端末に何も出力されない場合は、Pythonスクリプトを終了したいと思います。

2分以内に端末に何も出力されない場合は、Pythonスクリプトを終了したいと思います。

これは私の現在のbashです。ただループです。

while true ; do 
     python3 /Users/Name/Desktop/pythoncode.py
done

pythoncode.py2分以内に端末に何も出力されない場合は終了したいです。

ベストアンサー1

そしてzsh

zmodload zsh/system
(
  echo $sysparam[pid]
  exec python3 /Users/Name/Desktop/pythoncode.py
) | {
  read pid
  if sysread -o 1 -s 1 -t120; then
    cat
  else
    kill -s PIPE $pid 2> /dev/null
  fi
}

を使用すると、bash次のことができます。

(
  echo "$BASHPID"
  exec python3 /Users/Name/Desktop/pythoncode.py
) | {
  read pid
  if LC_ALL=C IFS= read -rd '' -n1 -t120 byte; then
    if [ -n "$byte" ]; then
      printf %s "$byte"
    else
      printf '\0'
    fi
    cat
  else
    kill -s PIPE "$pid" 2> /dev/null
  fi
}

これにより、スクリプトが端末ではなく標準出力に書き込むかどうかを確認します。

コマンドが何かを書いたときに停止し、2分間何も出力しない場合、つまり2分間アクティビティがないとコマンドを終了する場合は、次のことができますsocat

socat -T120 'exec:python3 /Users/Name/Desktop/pythoncode.py' -

または以下を使用してzsh

zmodload zsh/system
(
  echo $sysparam[pid]
  exec python3 /Users/Name/Desktop/pythoncode.py
) | {
  read pid
  while
    sysread -o 1 -t 120; ret=$?
    (( ret == 0 ))
  do continue; done
  # 5 means EOF
  (( ret == 5 )) || kill $pid
}

おすすめ記事