瓶子似乎卡住了,因为产生了响应

2024-09-22 16:31:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在尝试连接到后端(其他python脚本),在那里生成响应。这需要一点,似乎它打破了瓶子的反应。请看这里:

#!/usr/bin/env python
# -*- coding: utf-8 -*-s

from bottle import route, run, response, request
import subprocess

sherlockQueryScriptPath = ".\sherlock-backend\Sherlock_Queries.py"
emptyJsonString = "{}"

def main():
    #print prepareJson("test")
    #sys.exit(0)
    run(host='localhost', port=8080, threaded=True)

def prepareJson(query):
    queryProcess = subprocess.Popen(
        [sherlockQueryScriptPath, '-j', '-q', query],
        stdout=subprocess.PIPE,
        stderr=subprocess.PIPE,
        shell=True
    )
    queryProcess.wait()                # <== seems to cause problems
    result, error = queryProcess.communicate()

    if error:
        print "Error: ", error
        return emptyJsonString

    return result.strip()

def cors(func):
    def wrapper(*args, **kwargs):
        response.content_type = 'application/json; charset=UTF8'
        response.set_header("Access-Control-Allow-Origin", "*")
        response.set_header("Access-Control-Allow-Methods", "GET, POST, OPTIONS")
        response.set_header("Access-Control-Allow-Headers", "Origin, Content-Type")

        return func(*args, **kwargs)
    return wrapper

@route('/sherlockQuery.json')
@cors
def respondToGet():
    query = request.query.q
    return prepareJson(query)

@route('/sherlockQuery.json', method='POST')
@cors
def respondToPost():
    query = request.forms.get('q')
    return prepareJson(query)

if __name__ == "__main__":
    main()

有人能告诉我怎么做吗?或者保持连接直到响应就绪然后发送?你知道吗


Tags: jsonreturnmainresponserequestdeferrorquery