python - 从 Flask API 调用 shell 脚本
问题描述
API 构建真的很新 -
我正在尝试构建一个从 HTTP 请求中获取参数的 API。到目前为止,我能够启动烧瓶 API 服务器,我已将我的脚本放在同一个文件夹中。不过,当我调用 HTTP URL 时,它给了我以下错误:
FileNotFoundError: [Errno 2] No such file or directory: './bdp_scheduler_change -q queue -v vcores -s "api" -o "overwrite"': './bdp_scheduler_change -q queue -v vcores -s "api" -o "overwrite"'
这是我的代码:
import subprocess
import shlex
import flask
from flask import request, jsonify
app = flask.Flask(__name__)
app.config["DEBUG"] = True
@app.route('/', methods=['GET'])
def home():
return '''<h1>Shell Run</h1>
<p>An API Call To shell</p>'''
@app.route('/api/v1/bdpaas/resources/', methods=['GET'])
def api_filter():
query_parameters = request.args
queue = query_parameters.get('queue')
vcores = query_parameters.get('vcores')
subprocess.call(['./bdp_scheduler_change -q queue -v vcores -s "api" -o "overwrite"'])
if __name__=='__main__':
app.run(host='server.mydom.com', debug=True)
像运行我的代码 -
python3.6 test_api.py
[ngupta@server:/home/mapr/nishantypython] python3.6 test_api.py
* Serving Flask app "test_api" (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: on
* Running on http://server.mydom.com:5000/ (Press CTRL+C to quit)
* Restarting with stat
* Debugger is active!
* Debugger PIN: 266-911-173
10.96.5.176 - - [07/Jul/2020 04:57:29] "GET //api/v1/bdpaas/resources/ HTTP/1.1" 500 -
Traceback (most recent call last):
File "/usr/local/lib64/python3.6/site-packages/flask/app.py", line 2464, in __call__
return self.wsgi_app(environ, start_response)
File "/usr/local/lib64/python3.6/site-packages/flask/app.py", line 2450, in wsgi_app
response = self.handle_exception(e)
File "/usr/local/lib64/python3.6/site-packages/flask/app.py", line 1867, in handle_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib64/python3.6/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/usr/local/lib64/python3.6/site-packages/flask/app.py", line 2447, in wsgi_app
response = self.full_dispatch_request()
File "/usr/local/lib64/python3.6/site-packages/flask/app.py", line 1952, in full_dispatch_request
rv = self.handle_user_exception(e)
File "/usr/local/lib64/python3.6/site-packages/flask/app.py", line 1821, in handle_user_exception
reraise(exc_type, exc_value, tb)
File "/usr/local/lib64/python3.6/site-packages/flask/_compat.py", line 39, in reraise
raise value
File "/usr/local/lib64/python3.6/site-packages/flask/app.py", line 1950, in full_dispatch_request
rv = self.dispatch_request()
File "/usr/local/lib64/python3.6/site-packages/flask/app.py", line 1936, in dispatch_request
return self.view_functions[rule.endpoint](**req.view_args)
File "/home/mapr/nishantypython/test_api.py", line 47, in api_filter
subprocess.call(['./bdp_scheduler_change -q queue -v vcores -s "api" -o "overwrite"'])
File "/usr/lib64/python3.6/subprocess.py", line 287, in call
with Popen(*popenargs, **kwargs) as p:
File "/usr/lib64/python3.6/subprocess.py", line 729, in __init__
restore_signals, start_new_session)
File "/usr/lib64/python3.6/subprocess.py", line 1364, in _execute_child
raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: './bdp_scheduler_change -q queue -v vcores -s "api" -o "overwrite"': './bdp_scheduler_change -q queue -v vcores -s "api" -o "overwrite"'
URL - http://server.mydom.com:5000/api/v1/bdpaas/resources/
任何帮助表示赞赏。我可能对这个概念完全错误,如果是这种情况,请指导我。
解决方案
尝试而不是写./
来执行你的脚本,然后写sh
一个空格。
subprocess.call(['sh bdp_scheduler_change -q queue -v vcores -s "api" -o "overwrite"'])
推荐阅读
- javascript - 类型错误:cloneDeep.cloneDeep 不是函数(或 _ 未定义)
- json - 转换数据框数据集
转换为特定列的字符串数据类型的 JSON 格式,并将 JSON 字符串转换回 Dataframe
- python - RuntimeWarning:在 matplotlib 中除以零遇到错误
- java - 如何使文件输入流忽略转义字符
- python - Viewer() 中的 datamin 和 datamax 不起作用
- java - Gradle 会像 CMake 一样打印文本吗?
- android - 从 JSONArray 获取数据
- python-3.x - 如何切片 pandas.DatetimeIndex?
- flutter - Flutter:显示带有嵌入 html 标签的文本,并使电子邮件和电话号码可点击
- sql - 使用新列名创建了一个表,执行时出现一条错误消息,指出“列名无效”