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
- 只需将 subprocess.call 移动到获取请求即可。
- 注意不要在“/”上创建 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 -
在 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
- 只需将 subprocess.call 移动到获取请求即可。
- 注意不要在“/”上创建 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 -