質問編集履歴
4
read -tを使った例を追記
title
CHANGED
File without changes
|
body
CHANGED
@@ -41,4 +41,12 @@
|
|
41
41
|
$ tail -F /var/log/xxx.log | grep heartbeat | watchdog 60 pkill some-application
|
42
42
|
```
|
43
43
|
|
44
|
-
よろしくお願いします。
|
44
|
+
よろしくお願いします。
|
45
|
+
|
46
|
+
# 追記(回答を受けて)
|
47
|
+
|
48
|
+
奥が深い。。。
|
49
|
+
|
50
|
+
```bash
|
51
|
+
watchdog() { T=$1; shift && while :; do read -t $T || "$@"; done }
|
52
|
+
```
|
3
title
CHANGED
File without changes
|
body
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
以下の動きをするシンプルなコマンドについて、すでにもうどこかに存在しそうな気もするのですが、見つけられなかったのでPythonで書きました。でも、できれば再発明した車輪をプロジェクトに組み込むのは避けたいと思っています。こんな動きをする既存のLinuxコマンド or Pythonライブラリ or Goパッケージをご存知の方はいませんでしょうか?
|
1
|
+
以下の動きをするシンプルなコマンドについて、すでにもうどこかに存在しそうな気もするのですが、見つけられなかったのでPythonで書きました。でも、できれば再発明した車輪をプロジェクトに組み込むのは避けたいと思っています。こんな動きをする既存のLinuxコマンド or Pythonライブラリ or Goパッケージ or シェル芸をご存知の方はいませんでしょうか?
|
2
2
|
|
3
3
|
1. 標準入力からの入力を指定秒待つ。
|
4
4
|
2. 指定秒の間に何かしらの入力があれば、1に戻る。
|
2
exceptの位置が悪い
title
CHANGED
File without changes
|
body
CHANGED
@@ -14,13 +14,10 @@
|
|
14
14
|
|
15
15
|
def watchdog(fp, timeout, cmd):
|
16
16
|
while True:
|
17
|
-
try:
|
18
|
-
|
17
|
+
if select([fp], [], [], timeout)[0]:
|
19
|
-
|
18
|
+
next(fp)
|
20
|
-
|
19
|
+
else:
|
21
|
-
|
20
|
+
run(cmd)
|
22
|
-
except KeyboardInterrupt:
|
23
|
-
break
|
24
21
|
|
25
22
|
|
26
23
|
def main():
|
@@ -29,6 +26,8 @@
|
|
29
26
|
except (IndexError, ValueError):
|
30
27
|
print("Usage: %s timeout command [argument] ..." % argv[0],
|
31
28
|
file=stderr)
|
29
|
+
except KeyboardInterrupt:
|
30
|
+
pass
|
32
31
|
|
33
32
|
|
34
33
|
if __name__ == "__main__":
|
1
fpの位置がしっくりこない
title
CHANGED
File without changes
|
body
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
from sys import stdin
|
13
13
|
|
14
14
|
|
15
|
-
def watchdog(
|
15
|
+
def watchdog(fp, timeout, cmd):
|
16
16
|
while True:
|
17
17
|
try:
|
18
18
|
if select([fp], [], [], timeout)[0]:
|
@@ -25,7 +25,7 @@
|
|
25
25
|
|
26
26
|
def main():
|
27
27
|
try:
|
28
|
-
watchdog(int(argv[1]), argv[2:]
|
28
|
+
watchdog(stdin, int(argv[1]), argv[2:])
|
29
29
|
except (IndexError, ValueError):
|
30
30
|
print("Usage: %s timeout command [argument] ..." % argv[0],
|
31
31
|
file=stderr)
|