从烧瓶中的python输出字符串中获取部分

时间:2017-04-29 06:35:56

标签: javascript python bash

加入这个社区吧。我有python脚本,在html中生成字符串:

from shelljob import proc
import flask
import os
import eventlet

eventlet.monkey_patch()
app = flask.Flask(__name__)

@app.route('/create')
def create():
    g = proc.Group()
    p = g.run("timeout 30s mycommand | grep -Eo 'https?://\S+'")

    def read_process():
        while g.is_pending():
            lines = g.readlines()
            for proc, line in lines:
                yield "data:" + line + "\n\n"

    return flask.Response( read_process(), mimetype= 'text/event-stream' )

@app.route('/')
def get_page():
    return flask.send_file('page.html')

if __name__ == '__main__':
    app.run(debug=True)

该代码将产生如下内容:

This sample output with static result...
Please visit https://www.example.com/click?nonce=1a2b3c4d to bla bla bla.
This sample output with static result...
Please visit https://www.example.com/click?nonce=1a2b3c4d to bla bla bla.

我如何才能获得这样的网址并且只显示第一个结果:

https://www.example.com/click?nonce=1a2b3c4d

因为如果我输入" 超时30s mycommand | grep -Eo' https?:// \ S +' "我可以得到确切的网址。 我可以用javascript替换文本,但我仍然得到列表结果而不是1行。这是我的html" page.html"

<!DOCTYPE html>
<html>
<head>
    <style type="text/css">.urldb{color: #ffffff;padding: 10px;background: red;text-decoration: none;}</style>
</head>
<body>
<div id="output"></div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jQuery-linkify/2.1.4/linkify.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/jQuery-linkify/2.1.4/linkify-string.min.js"></script>
<script>
var source = new EventSource("/create");
var options = {className: 'urldb',target: {url: '_blank'}};
source.onmessage = function(event) {
    document.getElementById("output").innerHTML += event.data.replace(/(\bhttps?:\/\/\S+)|[^]/g, '$1').linkify(options) + "<br/>";
    if (event.data.indexOf('Welcome') > -1) {
        $("#output").hide();
        window.location.href = "https://example.com";
    }
};
</script>
</body>
</html>

使用该脚本我得到的结果如下:

https://www.example.com/click?nonce=1a2b3c4d
https://www.example.com/click?nonce=1a2b3c4d
https://www.example.com/click?nonce=1a2b3c4d

如果我的问题有任何不妥,请致谢和抱歉。

编辑以在python或javascript中添加更多替代错误并删除&#34; e&#34;说清楚。

1 个答案:

答案 0 :(得分:0)

你的模式可能有拼写错误。将https?://e\S+更改为https?://\S+(删除e),然后就可以了。

对于仅输出拳头匹配,您可以使用-m1。有关更多信息,请参阅man page