繁体   English   中英

flask restful:我如何通过 python function 作为参数来触发 GET 请求?

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

在 flask-restplus 中,我想将系统调用 object: subprocess.call subprocess.call()传递给GET请求以在服务器端点上打印出 R session 信息。 To do so, I think I need to add system call object to parser, which I hope api endpoint print out R session information. 但是,当我点击代码时,我没有在服务器端点上看到任何打印的 session 信息。 如何正确地将system.call()传递给GET请求以便在端点上打印一些东西? 任何想法?

我的尝试

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

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)

当我运行代码时,我在服务器端点上看不到任何打印的 session 信息。 当我将sess object 传递给 GET 请求时,我认为有问题。 如何将自定义 python function 或 object 作为参数传递给 GET 请求,以便在服务器端点上打印一些内容? 任何想法?

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

需要明确的是,如果没有 flask,您至少应该得到 output 一个。

例如运行一个虚拟脚本:

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!"])

将 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时,我在终端上看到了这个 output

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 -

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM