当术语以bash显示时终止终端应用程序

时间:2017-11-11 13:01:40

标签: python linux bash

是否可以编写运行python应用程序的bash脚本,直到应用程序的输出显示指定的术语然后关闭应用程序?

编辑: 输出如下:

const Http = require('http');
const Shot = require('shot');

(function () {

   const dispatch = function (req, res) {
       const reply = 'Hello World';
       res.writeHead(200, { 
            'Content-Type': 'text/plain', 
            'Content-Length': reply.length 
       });
       res.end(reply);
   };

   const server = Http.createServer(dispatch);

   Shot.inject(dispatch, { method: 'get', url: '/api/hello' }, (res) => {
       console.log(res.payload);
   });
})()

在SUCCESS出现后它应该关闭。

1 个答案:

答案 0 :(得分: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

但是如果你想杀死这个节目......

重要提示:

如果脚本正在写入stderr(默认情况下为logging.StreamHandler),或者它正在处理BrokenPipeError,那么这不会起作用。前者可以很容易地修复|&amp;重定向,但在后一种情况下,kill -INT会更好。