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

flask restful: how do I pass python function as a parameter to trigger GET request?

在 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 请求,以便在服务器端点上打印出某些内容?有什么想法吗?

我是 flask-restplus 的新手,所以也许我不应该像上面那样将 sess 传递给 GET 请求。我谦虚地请求可能的帮助。谢谢

明确一点,如果没有烧瓶,你至少应该得到输出。

例如运行宁一个虚拟脚本:

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 移动到获取请求即可。
  2. 注意不要在“/”上创建 API 端点,因为 flask_restplus 默认将其用作 api 参考页面,因此会造成混淆。所以一定要使用像 '/hello'
  3. 这样的端点

示例代码

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 -