详解python执行shell脚本创建用户及相关操作

用户发送请求,返回帐号和密码

###利用框架flask
整体思路:

  1. # 目的:实现简单的登录的逻辑
  2. # 1需要get和post请求方式 需要判断请求方式
  3. # 2获取参数
  4. # 3执行shell
  5. # 4如果判断都没问题,就返回结果

导包

...

给模版传递消息 用flash --需要对内容加密,因此需要设置 secret_key , 做加密消息的混淆

app = Flask(__name__)
app.secret_key = 'kingdomai'

使用wtf实现表单,需要自定义一个表单类

#validators=[DataRequired()保证填写了内容

class LoginForm(FlaskForm):
username = StringField('用户名:', validators=[DataRequired()])
submit = SubmitField('提交')

设置游标,并且方法为get和post

@app.route('/form', methods=['GET', 'POST'])

定义一个方法

def login():
  login_form = LoginForm()

c判断请求方式

if request.method == 'POST':

获取请求参数

username = request.form.get('username')

验证参数,wtf一句话实现校验,没有CSRF token将报错,在表单中添加{{ form.csrf_token }}

 if login_form.validate_on_submit():

执行shell

 username = username
  print('创建用户...')
	# 创建用户
  os.system('useradd %(name)s -s /home/work/%(name)s' % {'name': username})
	# 随机一个密码
  password = str((random.randint(100000, 999999)))
	# 设置密码
  os.system('echo %(name)s:%(pwd)s |chpasswd' % {'name': username, 'pwd': password})
	# 将面试题放入新创建用户路径下
  os.system('cp -r /home/renligeng/exam/ /home/work/%(name)s' % {'name': username})
	# 设置该路径权限
  os.system('chmod 700 /home/work/%(name)s' % {'name': username})
	# 设置用户权限
  os.system('setfacl -m u:%(name)s:rwx /home/work/%(name)s' % {'name': username})
	# 输出
  os.system('echo "您好,您的账号为:" %(name)s ",密码为:" %(pwd)s' % {'name': username, 'pwd': password})

  return ('您好,您的账号为:' + username + ',密码为:' + password)

全部代码

mianshi.py
from flask import Flask, render_template, request, flash
from flask_wtf import FlaskForm
from wtforms import StringField, SubmitField
from wtforms.validators import DataRequired

import os
import random

app = Flask(__name__)
app.secret_key = 'kingdomai'

class LoginForm(FlaskForm):
  username = StringField('用户名:', validators=[DataRequired()])
  submit = SubmitField('提交')

@app.route('/form', methods=['GET', 'POST'])
def login():
  login_form = LoginForm()

  # 1判断请求方式
  if request.method == 'POST':
    # 2获取请求参数
    username = request.form.get('username')
    # 3验证参数 没有CSRF token 会报错
    if login_form.validate_on_submit():

      # 执行shell
      username = username
      print('创建用户...')
      os.system('useradd %(name)s -s /home/work/%(name)s' % {'name': username})
      password = str((random.randint(100000, 999999)))
      os.system('echo %(name)s:%(pwd)s |chpasswd' % {'name': username, 'pwd': password})
      os.system('cp -r /home/renligeng/exam/ /home/work/%(name)s' % {'name': username})
      os.system('chmod 700 /home/work/%(name)s' % {'name': username})
      os.system('setfacl -m u:%(name)s:rwx /home/work/%(name)s' % {'name': username})
      os.system('echo "您好,您的账号为:" %(name)s ",密码为:" %(pwd)s' % {'name': username, 'pwd': password})

      return ('您好,您的账号为:' + username + ',密码为:' + password)
    else:
      flash('请输入用户名')
  return render_template('index.html', form=login_form)

if __name__ == '__main__':
  app.run(
    debug=True
  )
index.html
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>Title</title>
</head>
<body>
<form method="post">
  {{ form.csrf_token }}
  {{ form.username.label }}{{ form.username }}<br>
  {{ form.submit }}<br>

  {% for message in get_flashed_messages() %}
    {{message}}
  {% endfor %}
  <hr>

</form>
</body>
</html>

以上所述是小编给大家介绍的python执行shell脚本创建用户及相关操作详解整合,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对我们网站的支持!

(0)

相关推荐

  • Python使用ConfigParser模块操作配置文件的方法

    本文实例讲述了Python使用ConfigParser模块操作配置文件的方法.分享给大家供大家参考,具体如下: 一.简介 用于生成和修改常见配置文档,当前模块的名称在 python 3.x 版本中变更为 configparser. 二.配置文件格式 [DEFAULT] ServerAliveInterval = 45 Compression = yes CompressionLevel = 9 ForwardX11 = yes [bitbucket.org] User = hg [topsecr

  • shell命令行,一键创建 python 模板文件脚本方法

    写 python 文件时,每个文件开头都必须注明版本和编码.每次我 touch 文件之后粘贴这两句话让我不胜其烦. 由于我没有安装 python 的 IDE 工具,也没有为 vim 安装相应的插件.主要是为了练习自己的编码能力,而不希望过于依赖工具,所以为了解决这个问题,我写了这个脚本. #!/bin/bash if [ -n "$1" ]; then if [ -f "$1" ]; then echo $1 '文件已经存在,不能重复创建' else echo '#

  • Python读写配置文件的方法

    本文实例讲述了Python读写配置文件的方法.分享给大家供大家参考.具体分析如下: python 读写配置文件在实际应用中具有十分强大的功能,在实际的操作中也有相当简捷的操作方案,以下的文章就是对python 读写配置文件的具体方案的介绍,相信对大家学习Python有所帮助. python 读写配置文件ConfigParser模块是python自带的读取配置文件的模块.通过他可以方便的读取配置文件. 这里就来简单介绍一下python 读写配置文件的方法. 配置文件.顾名思议就是存放配置信息的文件

  • Python操作配置文件ini的三种方法讲解

    python 操作配置文件ini的三种方法 方法一:crudini 命令 说明 crudini命令是Linux下的一个操作配置文件的命令工具 用法 crudini --set [--existing] config_file section [param] [value] # 修改配置文件内容 crudini --get [--format=sh|ini] config_file [section] [param] # 获取配置文件内容 crudini --del [--existing] co

  • 使用python脚本自动创建pip.ini配置文件代码实例

    这篇文章主要介绍了使用python脚本自动创建pip.ini配置文件代码实例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 运行一下python代码自动创建pip/pip.ini文件并添加pip源 """ python建立pip.ini.py 2016年4月30日 03:35:11 codegay """ import os ini="""[global] inde

  • python中yaml配置文件模块的使用详解

    简述 和GNU一样,YAML是一个递归着说"不"的名字.不同的是,GNU对UNIX说不,YAML说不的对象是XML. YAML不是XML. 为什么不是XML呢?因为: YAML的可读性好. YAML和脚本语言的交互性好. YAML使用实现语言的数据类型. YAML有一个一致的信息模型. YAML易于实现. 上面5条也就是XML不足的地方.同时,YAML也有XML的下列优点: YAML可以基于流来处理: YAML表达能力强,扩展性好. 总之,YAML试图用一种比XML更敏捷的方式,来完成

  • Python读取properties配置文件操作示例

    本文实例讲述了Python读取properties配置文件操作.分享给大家供大家参考,具体如下: 工作需要将Java项目的逻辑改为python执行,Java的很多配置文件都是.properties的,文件内容的格式是"键.键.键...=值"的格式例如A.B.C=value1,D.F=value2等.并且"#"用来注视.python没有专门处理properties格式的包,只有处理标准的ini格式的包.所以需要自己写一个python程序来处理.不说了上程序. 这里参考

  • 详解python执行shell脚本创建用户及相关操作

    用户发送请求,返回帐号和密码 ###利用框架flask 整体思路: # 目的:实现简单的登录的逻辑 # 1需要get和post请求方式 需要判断请求方式 # 2获取参数 # 3执行shell # 4如果判断都没问题,就返回结果 导包 ... 给模版传递消息 用flash --需要对内容加密,因此需要设置 secret_key , 做加密消息的混淆 app = Flask(__name__) app.secret_key = 'kingdomai' 使用wtf实现表单,需要自定义一个表单类 #va

  • 使用python执行shell脚本 并动态传参 及subprocess的使用详解

    最近工作需求中 有遇到这个情况 在web端获取配置文件内容 及 往shell 脚本中动态传入参数 执行shell脚本这个有多种方法 最后还是选择了subprocess这个python标准库 subprocess这个模块可以非常方便的启动一个子进程,并且控制其输入和输出 Class Popen(args,bufsize = 0,executable=None, stdin =None,stdout =None,stderr =None, preexec_fn = None,close_fds =

  • 详解python校验SQL脚本命名规则

    需求背景 检查脚本文件中SQL语句是否按规范编写,规则如下: 创建表时,表名称需以"t_"开头且均为小写 增加和创建列时,列名称均为小写字母和_组成 创建函数,函数名称需以"f_"开头 创建存储过程,存储过程名称需以"p_"开头 创建索引,索引名称需以"idx_"开头 创建视图,视图名称需以"v_"开头 需求分析 首先要从脚本文件中提取出来表名称.列名称.函数名称.存储过程名称.索引名称.视图名称 这里需要

  • 详解Java执行groovy脚本的两种方式

    记录Java执行groovy脚本的两种方式,简单粗暴: 一种是通过脚本引擎ScriptEngine提供的eval(String)方法执行脚本内容:一种是执行groovy脚本: 二者都通过Invocable来传递参数并获取执行结果: Invocable:脚本引擎的解释器接口,提供invokeFunction和invokeMethod两种传递参数并获取执行结果的方法,Java JDK API文档解释如下: invokeFunction: invokeMethod: 以下为案例: 引入依赖 <depe

  • 详解Python并发编程之创建多线程的几种方法

    大家好,并发编程 今天开始进入第二篇. 今天的内容会比较基础,主要是为了让新手也能无障碍地阅读,所以还是要再巩固下基础.学完了基础,你们也就能很顺畅地跟着我的思路理解以后的文章. 本文目录 学会使用函数创建多线程 学会使用类创建多线程 多线程:必学函数讲解 经过总结,Python创建多线程主要有如下两种方法: 函数 类 接下来,我们就来揭开多线程的神秘面纱. . 学会使用函数创建多线程 在Python3中,Python提供了一个内置模块 threading.Thread,可以很方便地让我们创建多

  • 详解Python的Django框架中的模版相关知识

    HTML被直接硬编码在 Python 代码之中. def current_datetime(request): now = datetime.datetime.now() html = "<html><body>It is now %s.</body></html>" % now return HttpResponse(html) 尽管这种技术便于解释视图是如何工作的,但直接将HTML硬编码到你的视图里却并不是一个好主意. 让我们来看一下

  • 详解Python的Django框架中的Cookie相关处理

    浏览器的开发者在很早的时候就已经意识到, HTTP's 的无状态会对Web开发者带来很大的问题,于是(cookies)应运而生. cookies 是浏览器为 Web 服务器存储的一小段信息. 每次浏览器从某个服务器请求页面时,它向服务器回送之前收到的cookies 来看看它是怎么工作的. 当你打开浏览器并访问 google.com ,你的浏览器会给Google发送一个HTTP请求,起始部分就象这样: GET / HTTP/1.1 Host: google.com ... 当 Google响应时,

  • 详解jQuery中的元素的属性和相关操作

    元素属性 元素的属性中可以包含很多有用的信息,所以如何设置或得到属性中的值,就显得非常重要. jQuery 的 $.fn.attr 方法可以作为 setter 和 getter 使用,用来设置或获取属性的值.和 $.fn.css 用法类似,$.fn.attr 既可一次性接受单个属性,也可以接受多个属性(对象) : $('a').attr('href', 'allMyHrefsAreTheSameNow.html'); $('a').attr({ 'title' : 'all titles are

  • python执行shell获取硬件参数写入mysql的方法

    本文实例讲述了python执行shell获取硬件参数写入mysql的方法.分享给大家供大家参考.具体分析如下: 最近要获取服务器各种参数,包括cpu.内存.磁盘.型号等信息.试用了Hyperic HQ.Nagios和Snmp,它们功能都挺强大的,但是于需求不是太符,亦或者太heavy. 于是乎想到用python执行shell获取这些信息,python执行shell脚本有以下三种方法: 1. os.system() 复制代码 代码如下: os.system('ls') #返回结果0或者1,不能得到

  • 详解Python使用apscheduler定时执行任务

    apscheduler 的使用   我们项目中总是避免不了要使用一些定时任务,比如说最近的项目,用户点击报名考试以后需要在考试日期临近的时候推送小程序消息提醒到客户微信上,翻了翻 fastapi 中的实现,虽然方法和包也不少,但是要不就是太重了(比如需要再开服务,还要依赖 redis,都不好用),虽然也可以使用 time 模块的 time.sleep()机上 fastapi 的后台任务变相实现,但是相对简单的功能还行,复杂点的代码起来就麻烦了,所以还是专人专事找个负责这个额的包吧.找来找去发现

随机推荐