2017-11-11 3 views
0

Pythonアプリケーションを実行するbashスクリプトを記述することは可能ですか?アプリケーションの出力に指定された用語が表示されてからアプリケーションが終了するまでですか?用語がbashで表示されているときに端末アプリケーションを終了する

編集: 出力は次のようになります。

2017-11-11 14:21:27 LOG: 192.168.0.1 - Administrator:Test54 
2017-11-11 14:21:28 LOG: 192.168.0.1 - Administrator:Test55 
2017-11-11 14:21:29 LOG: 192.168.0.1 - Administrator:Test56 
2017-11-11 14:21:30 LOG: 192.168.0.1 - Administrator:Test57 
2017-11-11 14:21:31 LOG: 192.168.0.1 - Administrator:Test58 
2017-11-11 14:21:32 LOG: 192.168.0.1 - Administrator:Test59 
2017-11-11 14:21:33 LOG: 192.168.0.1 - Administrator:Test60 
2017-11-11 14:21:34 LOG: 192.168.0.1 - Administrator:Test61 
2017-11-11 14:21:35 LOG: 192.168.0.1 - Administrator:Test62 
2017-11-11 14:21:35 SUCCESS : 192.168.0.1 - Administrator:Test62 

SUCCESSが現れた後、それを閉じる必要があります。

答えて

2

あなたが次のPythonプログラムを持っているとしましょう:

#!/usr/bin/python 
for i in range(0,5001): 
    print(i) 

それは、このような2500を出力するときは、それを終了することができます

stdbuf -oL python a.py | sed '/2500/q' 

注、このビット汚い、あなたは可能性があります受け取る:

Traceback (most recent call last): 
    File "a.py", line 2, in <module> 
    print(i) 
BrokenPipeError: [Errno 32] Broken pipe 

しかし、あなたは、とにかくプログラムを強制終了したい場合は...


重要な注意:

スクリプトが(のようなlogging.StreamHandlerは、デフォルトではありません)標準エラー出力への書き込み、またはそれはだ場合した場合これは動作しません。 BrokenPipeErrorを処理します。前者は簡単に| &リダイレクトですが、後者の場合、kill -INTがうまく機能します。

+0

私の質問を編集しましたが、プログラムを殺しません。 –

+0

'プログラム| sed '/ SUCCESS/q''はうまくいくはずです。 – hek2mgl

+1

スクリプトが 'stderr'に書き込んでいる場合、これはうまくいきません([logging.StreamHandler'](https://docs.python.org/3/library/logging.handlers.html#logging.StreamHandlerのように)デフォルトでは)、または 'BrokenPipeError'を処理している場合に発生します。前者は '|&'リダイレクトで簡単に修正できますが、後者の場合は 'kill -INT'がうまくいくでしょう。 – randomir

関連する問題