在bash中显示术语时终止终端应用程序
问题描述:
是否可以编写运行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
应该关闭成功后显示出来。
答
比方说,你有以下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会更好。
不杀死程序,我编辑了我的问题。 –
'程序| sed'/ SUCCESS/q''应该可以工作。 – hek2mgl
注意,如果脚本写入'stderr'(如['logging.StreamHandler'](https://docs.python.org/3/library/logging.handlers.html#logging.StreamHandler)默认情况下),或者它正在处理'BrokenPipeError'。前者可以很容易地用'|&'重定向修复,但在后一种情况下,'kill -INT'会更好。 – randomir