-
2021-01-13 16:35:31
我对Flask相当陌生,因此我对代码背后的逻辑以及我的思维过程是否有意义有疑问。
我有一个旧的python脚本,该脚本需要大量数据,对其进行处理,然后使用matplotlib生成图。这很好。
现在,我想构建一个Web应用程序,在该应用程序中,用户选择特定的输入参数,单击“提交”按钮,我的服务器(在sqlite的帮助下)检查是否已经存在绘图/使用这些参数进行绘图的数据,如果是的,然后使其可供用户下载。
如果该图/数据不存在,我的flask应用程序将调用我的python脚本,并将为其创建新的图/数据,并将其上载到sqlite,然后用户可以从Web应用程序下载它。
到目前为止,您可以在我的代码中看到python脚本是一个外部脚本,我的计划是不从我的flask应用程序的视图中包含该脚本,这有意义吗?我应该在这里调用外部脚本还是直接将代码复制到我的视图中?(到目前为止,我想避免使用它,因为这是一个很大的脚本)
到目前为止,我的逻辑看起来像这样:
# this part works well so far, I get the user input here and redirect it to the specific page
@app.route('/plot', methods = ['GET','POST'])
def get_plot():
if request.method == 'POST':
input1 = request.form['input1']
input2 = request.form['input2']
input3 = request.form['input3']
return redirect('plot/{}/{}/{}/'.format(input1, input2, input3))
else:
return render_template('plot.html')
# here it get's a bit tricky for me
@app.route('/plot')
def create_plot(input1='1', input2='2', input3='3'):
try:
db = get_db(DB_PLOT)
cur = db.execute('SELECT * FROM {} WHERE param1 = {} AND param2={}'.format(input1, input2, input3)) # get all the data from the table
except:
return "Plot not found !"
# CALL THE EXTERNAL PYTHON SCRIPT HERE?
cur = db.execute('SELECT * FROM {} WHERE param1 = {} AND param2={}'.format(input1, input2, input3)) # python script should have updated the database, so i can call the data here
data = cur.fetchall()
return render_template('show_plot.html', data=data)
此外,我还有另一个问题:就像我所说的那样,到目前为止,我只使用过自己的python脚本,它获取原始数据,对其进行处理,然后使用matplotlib创建一个图。当我想在我的Web应用程序中实现它时,是否仍应使用python脚本创建绘图,将绘图上传到sqlite,然后使用Web应用程序从sqlite获取图像,或者我应该仅上传操纵数据,然后下载来自sqlite的数据并创建烧瓶图?
最后,我想让用户可以将图下载为.jpg和.pdf文件。
非常感谢!
解决方案
您可以使用子流程模块来实现此目的。根据脚本生成绘图所需的时间,您应该考虑将页面返回给用户,要求用户在一段时间后刷新页面直到绘图可用(您也可以频繁使用javascript自动刷新)。花费太长时间的视图功能可能会成为问题,因为Flask用于处理请求的线程数量是有限的,如果太多用户同时生成图,这可能会使您的应用程序不可用。
调用脚本之前返回显然不起作用。
return "Plot not found !"
# CALL THE EXTERNAL PYTHON SCRIPT HERE?
在开始进行图生成之前,您还需要在数据库中插入一个条目,以便其他用户无法再次使用相同的参数运行脚本。
您的except情况(当情节还不是数据库时)看起来像这样(可能很容易受到SQL注入的影响):
# write entry to the database with parameters but without plot
db.execute('INSERT INTO {} (param1, param2, param3) VALUES ({}, {}, {})'.format(table_name, input1, input2, input3))
# start process which does it's calculations in another process and
# updates the table we just inserted with the plot when finished
p = Popen(['/path/to/script.py', input1, input2, input3], stdin=None, stdout=None, stderr=None, close_fds=True)
return "Plot is beeing generated ..., please refresh page until the plot is available"
然后,生成绘图的脚本将按以下方式更新条目(可能容易受到SQL注入的攻击):
db.execute('UPDATE {} SET plot_blob = {} WHERE param1 = {} AND param2 = {} AND param3 = {}'.format(table_name, binary_image_data, input1, input2, input3))
笔记:
您可以构建url_for更整洁的URL:
return redirect(url_for('create_plot', input1=input1, input2=input2, input3=input3))
尽管您使用的库可能会处理此问题,但是您的SQL查询可能容易受到SQL注入的攻击。不知道是哪个
更多相关内容 -
Shell脚本切换root用户或获取root权限
2022-03-09 16:06:53需求:Shell脚本不能通过root用户执行,只能通过普通用户执行。但是脚本中的某些命令需要时root权限。 想法:在执行需要root权限的命令时切换到root用户 或者 拿到root权限。 切换root用户 1、安装expect yum ...前言
需求:Shell脚本不能通过root用户执行,只能通过普通用户执行。但是脚本中的某些命令需要时root权限。
想法:在执行需要root权限的命令时切换到root用户 或者 拿到root权限。
一、切换root用户的脚本
1、安装expect
yum install -y expect
expect 的用法参考这篇文章:
Linux expect 介绍和用法 - 梦徒 - 博客园 (cnblogs.com)
https://www.cnblogs.com/saneri/p/10819348.html
2、编写脚本
## switchRoot.sh 脚本内容 #!/usr/bin/expect ## 只有先进入expect环境后才可执行spawn ## 不论是在此脚本内自动输入密码还是在脚本外手工输入密码,至少要等待1秒 set timeout 1 ## 切换root用户 spawn su root ## 判断上述进程(su kevin)的输出结果中是否有“Password”的字符串(不区分大小写)。 ## 若有则立即返回,否则就等待一段时间后返回,等待时长就是开头设置的1秒 expect "Password:" ## 向上面的进程(su kevin)发送字符串中的密码, 并且自动敲Enter健(\r) send "root123456\r" interact
3、效果
4、问题
当你在执行一个Shell脚本时,为了获取root权限而切换root用户时,会导致脚本中止。这显然不是我们想要的,因此我们可以选择使用 sudo 命令来临时获取root 权限。
二、获取root权限(sudo)的脚本
## sudoUser.sh 脚本内容 #!/usr/bin/expect set timeout 1 ## sudo命令会返回的提示信息的一部分 expect "password for" ## 当前用户的密码 send "dhj123456\r" interact
注意:并非所有用户都能使用sudo命令。
三、测试效果
新建test.sh脚本,内容如下:
#!/bin/bash echo "-------------- start." ## 打印root用户home目录的abc.txt文件 ## 这个文件只有root能查看和修改,其他用户需要通过sudo来暂时获取root权限 sudo cat /root/abc.txt ## 调用暂时获取root权限的脚本 ./sudoUser.sh echo "------------ end." exit
效果
参考文章:
-
Jenkins参数构建前调用脚本获取参数
2020-12-14 10:09:35安装插件:Extended Choice Parameter Plug-In 1> 创建自由风格项目 2> 添加参数 3> 配置参数 ... 填写脚本,这里只支持Groovy语言 ...思路:用Groovy调用Shell脚本 5> 调用演示安装插件:Extended Choice Parameter Plug-In
1> 创建自由风格项目
2> 添加参数
3> 配置参数
4> 填写脚本,这里只支持Groovy语言
思路:用Groovy调用Shell脚本
5> 调用演示
-
RTX用户列表获取list脚本
2012-07-07 11:10:13通过PYTHON自动获取RTX上的用户列表,然后调用群发脚本发送通知给用户 -
Linux Shell 查找出运行该脚本的用户
2021-03-14 17:00:27需要空格,tab,新行以顺序排列,放置编辑器出现关于space-tab兼容性问题。...查找出运行该脚本的用户 # Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=需要空格,tab,新行以顺序排列,放置编辑器出现关于space-tab兼容性问题。如果调用_AS_PATH_WALK时IFS没有设置,将会通过将IFS设置为空值,关闭word splitting。
1 as_nl=' 2 ' 3 IFS=" "" $as_nl"
查找出运行该脚本的用户
# Find who we are. Look in the path if we contain no directory separator. case $0 in *[\\/]* ) as_myself=$0 ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. test -r "$as_dir/$0" && as_myself=$as_dir/$0 && break done IFS=$as_save_IFS ;; esac
$0
当前脚本的文件名如果没有发现用户,可能是通过sh COMMAND运行的
if test "x$as_myself" = x; then as_myself=$0 fi if test ! -f "$as_myself"; then echo "$as_myself: error: cannot find myself; rerun with an absolute file name" >&2 { (exit 1); exit 1; } fi
-
C#利用ScriptControl动态执行JS和VBS脚本
2020-12-26 05:50:07ScriptControl接口 属性名称 类型 备注 ...检测是否允许运行用户的接口元素。如果为False,则诸如消息框之类的界面元素不可见。...设置或获取脚本引擎解释的语言,例如:VBScript、JScript。 Name String 脚本引 -
Shell脚本调用阿里云API实现DDNS动态域名解析
2020-05-16 22:31:19为此,想通过编写一个Shell脚本,定期通过互联网服务获取当前机器所在网络的IP地址,并将新的IP地址通过阿里云提供的API,更新到对应的域名解析记录。 申请AccessKey 登陆阿里云官网,在控制台的右上角,将鼠标移动... -
EBS获取用户的密码.zip
2020-07-31 10:12:23包括一个package和一段sql脚本,package的作用是将Oracle EBS后台表中存储为密文的密码解密,sql脚本调用了package,将用户名填写入条件中即可获取密码 -
【Linux学习】如何编写Shell脚本调用企业微信api来发消息给企业微信成员?
2019-01-15 16:43:17【Jenkins学习 】如何编写Python脚本来调用企业微信的api通知企业微信成员关于Jenkins的编译结果? https://blog.csdn.net/qq446282412/article/details/86361318 但是并不是每台Linux服务器上都有合适的python... -
python--python脚本中调用shell命令
2019-09-03 09:35:39文章目录python脚本调用shell命令os.system()os.popen()subprocess.call()subprocess.Popen()commands 参考: python脚本调用shell命令 os.system() os.system()执行成功会自动返回值0,执行的shell命令结果会打印... -
Java调用R脚本的方法总结
2018-08-01 18:56:07实际中有这样一种场景:算法工程师用R搭建了机器学习算法模型,想用于javaweb之中但是又不想重新用java写一遍算法模型,那么可以考虑java程序中直接调用R的脚本。JAVA负责系统的构建,R用来做运算引擎,从而实现应用... -
Hive调用python脚本
2018-12-06 11:04:29Hive的 TRANSFORM 关键字提供了在SQL中调用自写脚本的功能,本实例通过python脚本对电影数据进行清洗,帮助读者了解hive调用python脚本的整个流程。 操作步骤: 1、创建基表 CREATE TABLE u_data ( userid INT,... -
Java调用shell脚本
2018-06-28 18:08:02也许在某种情况下,Java程序需要调用shell脚本才能完成,比如为了从其他服务器上下载一些文件,但是却不能使用普通的sftp代码完成,需要使用到证书,这时shell脚本就比较方便 在这里我写了一个工具类,是为了调用... -
shell脚本如何获取当前时间(转)
2021-05-12 10:23:52在shell脚本里常常需要获取系统时间来处理某项操作,今天系统的学习了一下如何获取系统时间。记录如下:Linux的系统时间在shell里是可以直接调用系统变量的如:获取今天时期:`date +%Y%m%d` 或 `date +%F` 或 $... -
linux在shell脚本中获取进程ID,父进程ID和用户ID的方法
2021-05-06 16:03:22当在执行shell脚本时,它会启动一个叫子shell的进程。子shell进程的PID存储在一个特殊的变量‘$$'中。这个变量只读,不可以在脚本中修改它。例如: [test@node1 ~]$ cat test.sh #!/bin/bash echo "执行的文件: $0... -
python脚本封装成接口且,由前端平台调用
2022-04-08 16:44:032、搭建后端服务(flask轻便),编写服务端代码,封装脚本为接口调用方式,postman调试接口请求OK,达到预期效果。python实现。 注意事项:1)服务端的端口号不与前端 及平台的其他服务重复。 3、前后端联调。 方法... -
jmeter 用JS脚本加密参数(已获取JS加密脚本)
2019-04-30 15:04:44先将JS脚本(jiami.js)放入jmeter.bat所在的bin文件夹里 ...即可调用该js中的方法 这里举例,我传入的参数i要加密: 该JS中的加密方法是jiami.toBase64(); var jm = jiami.toBase64(${i}); vars.p... -
LINUX SHELL脚本中获得用户主目录
2019-04-03 07:33:14脚本中: echo ${HOME} C中: #include <stdlib.h> char *home_path = getenv("HOME"); printf("home_path=%s\n", home_path); -
shell脚本里面相互调用时路径不要用pwd获取
2013-11-22 17:51:29脚本 observerReport.sh 里面调用 mergerReport.sh,observerReport.sh在script/目录, mergerReport.sh在下一级子目录script/merge里, 此时,如果mergerReport.sh里面用pwd生成路径,并不会是 script/merge,而是... -
shell脚本获取当前日期和时间
2019-03-22 19:21:06Linux的系统时间在shell里是可以直接调用系统变量的如: 获取今天时期:date +%Y%m%d 或 date +%F 或 $(date +%y%m%d) 命令输出结果如下: [root@centi-C sh]# date +%Y%m%d 20190322 [root@centi-C sh]# date +%F ... -
如何在shell脚本中调用oracle数据库并返回结果
2019-08-13 11:19:33那么如何在root用户下写shell脚本调用oracle数据库并返回结果 只需要在你的shell脚本中加入下面的脚本即可! # 获取oracle环境变量并在root用户中生效(暂时) export ORACLE_HOME=$TY_ORACLE_HOME export LD_... -
Linux 脚本内容指定用户执行
2018-06-29 19:13:00## 如果直接写在下面,则变量获取不到,并且下面的 $ 标识的都要用 引号引起来,否则这些参数接收不到 tarfile=$1 tarfile_name=${tarfile##*/} echo "$tarfile" echo "$tarfile_name" ## 切换用... -
xShell终端调用VBS脚本 使用方法说明
2016-07-28 16:05:47【调用方法】 1、先编写 VBS 脚本。比如我们要让 xShell 在目标设备需要确认时自动输入 y ,可以像下面这样编写脚本: Sub main xsh.Screen.Synchronous = True ' 使窗口显示与当前输出同步 xsh.Screen.... -
用浏览器的油猴子脚本调用IDM下载百度云盘中的资料
2019-05-22 18:01:00用浏览器的油猴子脚本调用IDM下载百度云盘中的资料(只能支持单个文件下载) 第一步需要现在浏览器中安装油猴子插件Tampermonkey.crx 安装油猴子插件插件主页:https://tampermonkey.netTampermonkey 是一款免费的... -
超实用的shell脚本--一键获取进程所有信息
2020-05-19 13:57:42转载来源 :超实用的shell脚本–一键获取进程所有信息 :http://www.safebase.cn/article-257427-1.html 摘要: 概述有时我们想只是通过一个进程PID就可以输出该进程的相关信息,可以怎么处理呢?下面用shell脚本来... -
ssh远程连接主机执行脚本失败,原因:无法获取全局环境变量,解决:
2022-04-09 11:01:11ssh 远程执行脚本 -
JS元素获取和事件调用
2018-07-13 02:13:27有时我们需要脚本向用户提供反馈的信息。如创建一个弹出的警告窗口,提示用户重要信息。这是使用alert实现的,里面可以是数字或者字符串等 将alert逐行放置,如果alert未执行,说明上面的代码有错误。初学者应养成... -
在 python 脚本中调用 linux 的 shell 执行命令
2019-04-17 19:43:19这个模块支持在 python 脚本中直接调用服务器的 shell , 执行命令, 大爱: from subprocess import call # 获取当前环境的python解释器路径 import sys py_path = sys.executable # 在shell中执行字... -
Hive调用python脚本实现数据清洗、统计过程
2018-05-18 16:11:11本实例通过python脚本对电影数据进行清洗,帮助读者了解hive调用python脚本的整个流程。 操作步骤: 1、创建基表 CREATE TABLE u_data ( userid INT, //用户ID movieid INT, //电影ID rating INT, //电影... -
Linux下Qt调用python脚本的一种解决办法
2020-03-23 14:59:11最近在做一个深度学习对图片中对象识别效果的检测工具,其...我们可以直接用qt的QProcess调用bash来执行运行脚本的命令,获取结果数据则有两种方式: 一是在python脚本中将结果写到文本中,脚本结束后由qt读取。 ...