2017-11-11 155 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 

應該關閉成功後顯示出來。

回答

2

比方說,你有以下Python程序:

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

注意,這有點髒,可能會:

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

當輸出2500這樣你可以終止它收到一個

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