flask restful:如何将python函数作为参数传递以触发GET请求



在flask restplus中,我想传递系统调用对象:subprocess.call()GET请求,以在服务器端点上打印出R会话信息。要做到这一点,我认为我需要将系统调用对象添加到解析器中,我希望api端点能够打印出R会话信息。然而,当我点击代码时,我没有在服务器端点上看到任何打印的会话信息。如何正确地将system.call()传递给GET请求以便在端点上打印一些内容?知道吗?

我的尝试

这是可以在python IDE控制台上打印出R会话的系统调用。

sess = subprocess.call(['C:/Program Files/R/R-3.6.3/bin/Rscript','--vanilla','-e','sessionInfo()'])

我试图将sess传递给GET请求

from flask import Flask, jsonify
from flask_restplus import Api, Resource, fields, reqparse, inputs
import subprocess
app = Flask(__name__)
api = Api(app)
ns = api.namespace('sess')
sess = subprocess.call(['C:/Program Files/R/R-3.6.3/bin/Rscript','--vanilla','-e','sessionInfo()'])
@ns.route('/')
class AResource(Resource):
def get(self):
parser = reqparse.RequestParse()
parser.add_argument(sess, type= str, required=True)
#return parser.parse_args()
try:
args = parser.parse_args()
return jsonify(args)
except:
return None, 400
if __name__ == '__main__':
app.run(debug=True)

当我运行代码时,我在服务器端点上看不到任何打印的会话信息。当我将sess对象传递给GET请求时,我认为出现了问题。如何将自定义python函数或对象作为参数传递给GET请求,以便在服务器端点上打印出一些内容?知道吗?

我是烧瓶restplus的新手,所以也许我不应该像上面那样通过sess来获取请求。我谦卑地请求可能的帮助。感谢

为了清楚起见,如果没有烧瓶,您应该至少得到一个输出。

例如,运行一个伪脚本:

from flask import Flask
from flask_restplus import Api
import subprocess
app = Flask(__name__)
api = Api(app)
sess = subprocess.call(["echo","I am getting this output!"])

将输出

I am getting this output!

如何在每个get请求中调用subprocess.call

  1. 只需将subprocess.call移动到get请求即可
  2. 注意不要在"/"上创建API端点,因为flask_restplus默认情况下将其用作API引用页,因此这会导致混淆。因此,请确保使用诸如"/hello"之类的端点

示例代码

from flask import Flask
from flask_restplus import Resource, Api
from flask_restplus import Api
import subprocess
import os
app = Flask(__name__)
api = Api(app)
@api.route('/hello')
class HelloWorld(Resource):
def get(self):
subprocess.call(["echo","I am getting this output!"])
subprocess.call(['Rscript','--vanilla','-e','sessionInfo()'])
return {'hello123': 'world'}
if __name__ == '__main__':
app.run(debug=True)

当我在终端上运行应用程序并请求http://localhost:5000/hello在我的浏览器上,我在我的终端上看到了这个输出

I am getting this output!
R version 3.6.3 (2020-02-29)
Platform: x86_64-apple-darwin18.7.0 (64-bit)
Running under: macOS Mojave 10.14.5
Matrix products: default
BLAS/LAPACK: /usr/local/Cellar/openblas/0.3.9/lib/libopenblasp-r0.3.9.dylib
locale:
[1] en_IE.UTF-8/en_IE.UTF-8/en_IE.UTF-8/C/en_IE.UTF-8/en_IE.UTF-8
attached base packages:
[1] stats     graphics  grDevices utils     datasets  methods   base
loaded via a namespace (and not attached):
[1] compiler_3.6.3
127.0.0.1 - - [22/Apr/2020 15:01:16] "GET /hello HTTP/1.1" 200 -

最新更新