質問するログイン新規登録

質問編集履歴

4

read -tを使った例を追記

2019/06/30 14:06

投稿

YouheiSakurai
YouheiSakurai

スコア6154

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

2019/06/30 14:06

投稿

YouheiSakurai
YouheiSakurai

スコア6154

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の位置が悪い

2019/06/30 12:55

投稿

YouheiSakurai
YouheiSakurai

スコア6154

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
- if select([fp], [], [], timeout)[0]:
17
+ if select([fp], [], [], timeout)[0]:
19
- next(fp)
18
+ next(fp)
20
- else:
19
+ else:
21
- run(cmd)
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の位置がしっくりこない

2019/06/30 12:39

投稿

YouheiSakurai
YouheiSakurai

スコア6154

title CHANGED
File without changes
body CHANGED
@@ -12,7 +12,7 @@
12
12
  from sys import stdin
13
13
 
14
14
 
15
- def watchdog(timeout, cmd, fp):
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:], stdin)
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)