使用sys.exit()

时间:2018-01-30 16:51:57

标签: python json ajax cgi

我正在使用本地Web应用程序,该应用程序通过AJAX在Web服务器上执行Python脚本。

我尝试在远程服务器上部署应用程序,因为我们面对的是AJAX statusText: "parsererror"

我认为这是因为当脚本失败时,它没有按预期接收到正确的JSON。 我怎样才能确保脚本中断将JSON返回给浏览器,以便我能理解错误的性质?

AJAX调用如下:

    $.ajax({
        async: true,
        type: "POST",
        url: "cgi-bin/myscript.py",
        contentType: "application/x-www-form-urlencoded;charset=ISO-8859-15",
        data: JSON.stringify(run_details), 
        dataType: "JSON"
    })
    .done(function(data) { 
            console.log(data)
    })
    .fail(function(xhr) {
      console.log('Error in myscript (cf. Ajax error below).');
      console.log('error',xhr);
    });

在工作条件下,我使用以下方法将数据返回给客户端,该方法在本地服务器上运行良好:

success_message = "Some text"
result = {'message': success_message};   

#Send JSON result back to Ajax
print("This line allows the following to be received by browser \n")
json.dump(result, sys.stdout)

如果脚本出现错误,我调用此函数来中断脚本:

def interruptScript(a_cursor, a_conn, error_message):
    # Close communication with the database
    a_cursor.close()
    a_conn.close()   
    #Add error message to object
    result = {'message': error_message};   

    #Send JSON result back to Ajax
    print("This lines allows the following to be received by browser \n")
    json.dump(result, sys.stdout)                      
    sys.exit(1)

理想情况下,我希望在AJAX的“responseText”(现在为空“”)中可以访问error_message。

到目前为止,我尝试在sys.exit(error_message)中包含一个字符串(即sys.exit(json.dumps(result)))和一个JSON字符串(即sys.exit()),但在PyDev中进行调试我了解到TypeError: an integer is required (got type str) ,这可能是bug。出于这个原因,我最后添加了整数1,希望json.dump内容将在sys.exit之前通过AJAX传递。

更新: 我找到了导致错误的原因(远程服务器的python安装上缺少python包)。但是我会保持这个问题的开放,因为原则上我仍然有兴趣知道如何确保来自Python的错误消息(无论是来自我的自定义interruptScript()函数,还是直接来自Python的通知包没有安装)正确推送到浏览器。我正在使用cgitb.enable(),所以问题主要是,如果AJAX期待JSON,如何推送错误消息?

0 个答案:

没有答案