精华内容
下载资源
问答
  • SOCRight:云海统一权限管理系统是基于python的tornado框架实现的一个统一权限管理系统
  • 可以直接使用的工程文件,是一个入门级别的python系统工程,由于做的相对简单适合入门的新手做参考使用,请各位参考,使用方法已经上传.
  • 这是一个使用Python实现基于dos下面向数据库的教务管理系统,实现了管理员、教职工、学生三种不同身份的操作,可以实现的功能有:学生、教职工信息管理、不同权限的信息发布、管理各种信息等。代码约1200行,对于...
  • 主要为大家详细介绍了基于python实现学生管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要为大家详细介绍了基于Python实现用户管理系统,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 教务管理系统(Python)

    2016-10-17 19:42:24
    这是一个使用Python实现的基于dos下面向数据库的教务管理系统,实现了管理员、教职工、学生三种不同身份的操作,可以实现的功能有:学生、教职工信息管理、不同权限的信息发布、管理各种信息等。代码约1200行,对于...
  • python_web使用django框架个人博客管理系统,前端+后台。 运行环境 django1.10+python3+sublime text3+Navicat Premium+cmd命令 项目技术 django+python+sql+cmd+html+css+jquery........ 使用分页插件,jquery实现...
  • python实现图书管理系统

    千次阅读 多人点赞 2020-08-03 15:44:56
    print("欢迎来到图书管理系统注册页面~") username = input("请输入用户名:") if len(username)<6: print("用户名不能小于6个字符") else: email = input("请输入邮箱:") password = input("请输入密码...

    用户注册

    def logon():
        print("欢迎来到图书管理系统注册页面~")
        username = input("请输入用户名:")
        if len(username)<6:
            print("用户名不能小于6个字符")
        else:
            email = input("请输入邮箱:")
            password = input("请输入密码:")
            if len(password)<8:
                print("密码不能少于8位")
            else:
                rpassword = input("请确认密码:")
                if password ==rpassword:
                    print("注册成功!")
                    # 函数调用,每追加一列数据都进行换行 每个数据之间都有空格
                    preserve_data(path,[username,'   '+ email,'   '+ password + '\n'])
                    login_tips = input('是否登录?(yes/no)')
                    if login_tips =='yes':
                        login()
                    else:
                        pass
                    return True
                else:
                    print("两次输入的密码不一致,请重新输入!")
                    # 递归调用
                    logon()
    

    保存数据到文件

    path = r'/Users/mozili/PYTHONWORKSPACE/bookManage/user.txt'
    def preserve_data(file_path,data):
        # 将字符串转换为bytes,因为write写入的是字节流,不能是字符串 当为w时需要解码
        # data = data.encode()
        # 打开文件,追加数据到文件
        with open(file_path,'a') as wstream:
            # 判断是否可写
            if wstream.writable():
                wstream.writelines(data)
            else:
                print("没有权限!")
    

    用户登录

    def login():
        print("欢迎来到图书管理系统登录页面~")
        tips = input("是否已经注册?(yes/no)")
        if tips =='yes':
            while True:
                username = input("输入用户名:")
                password = input("输入密码:")
                # 读取文件时可能会出现找不到文件的异常,因此使用try except
                try:
                    # 读取文件中的内容
                    with open(path, 'rb') as stream:
                        # 读取多行保存到列表中,列表中保存的是二进制,字节
                        result = stream.readlines()
                        # print(result)
                        # 列表推导式,循环遍历列表,将字节解码为字符串放在一个新列表uesr_list
                        uesr_list = [i.decode() for i in result]
                        # print(uesr_list)
                        # 循环遍历列表,检查输入的用户名和密码是否在字符串中
                        for i in uesr_list:
                            info = i.split('   ')
                            # print(info)
                            if username == info[0] and password == info[2].rstrip('\r\n'):
                                print("登录成功")
                                operate(book_path,username)
                                break
                        else:
                            raise Exception("用户名或密码错误,请重新输入!")
    
                except Exception as err:
                    print(err)
                # 没有异常时执行else语句
                else:
                    break
        else:
            print("您还未注册,请先注册后再登录!")
            # 递归
            logon()
    

    查询图书

    '''
    遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    def find_books(path):
        try:
            with open(path, 'r') as rstream:
                # readlines读到的内容是一个列表
                container = rstream.readlines()
                # 通过列表推导式得到新的列表,即每个元素去掉后面的换行符号
                new_container = [books_name.rstrip('\n') for books_name in container]
                for b_name in new_container:
                    # 打印图书+《》
                    print("《{}》".format(b_name))
    
        except Exception as err:
            print("错误原因:",err)
    

    添加图书

    def add_book(b_path,username):
        # 添加前首先判断是否是管理员
        permission(b_path, username)
        # 追加图书 不能是w ,否则会清空之前的内容
        with open(b_path, 'a') as wstream:
            # 判断是否可写
            if wstream.writable:
                msg = input("请输入书名:")
                try:
                    # 添加书籍之前判断某本书是否已经添加
                    with open(b_path) as rstream:
                        while True:
                            line = rstream.readline()
                            # 去掉右边的换行
                            line = line.rstrip('\n')
                            # 当找到空行是如果还没有找到与输入的书名一致的时候,就添加输入的书名
                            if not line:
                                book = '\n' + msg
                                wstream.write(book)
                                print("添加成功")
                                break
                            else:
                                # 输入的图书和读到的行有一致的则提示不能重复添加
                                if line == msg:
                                    print("{}已添加,请不要重复添加哦~".format(msg))
                                    break
                except Exception as err:
                    print("错误原因:", err)
            else:
                print("没有权限")
    

    修改图书

    '''
    遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    def update_book(b_path,username):
        permission(b_path, username)
        try:
            with open(b_path, 'r') as rstream:
                container = rstream.read()
                # 通过'\n'来分割字符串,返回结果是列表
                container = container.split('\n')
                # print(container)
                # 删除前先展示有哪些图书
                find_books(book_path)
                book_name = input("请输入需要修改的图书书名:")
                # 循环遍历修改书名
                for i in range(len(container)):
                    if book_name == container[i]:
                        rbook_name = input("请输入修改后的图书书名:")
                        container[i] = rbook_name + '\n'
                    else:
                        # 列表中的每个书名后面加换行符,用于写入文件时换行
                        container[i] = container[i] + '\n'
                # print(container)
                # 将书名更新后的内容以writelines写入文件中  writelines(可迭代)
                with open(b_path, 'w') as wwstream:
                    wwstream.writelines(container)
                print("修改成功")
        except Exception as err:
            print("错误原因:", err)
    

    删除图书

    def del_book(b_path,username):
        permission(path, username)
        try:
            with open(b_path, 'r') as rstream:
                container = rstream.read()
                # 通过'\n'来分割字符串,返回结果是列表
                container = container.split('\n')
                # print(container)
                # 展示有哪些图书
                find_books(book_path)
                book_name = input("请输入需要删除的图书书名:")
                # 循环遍历修改书名
                for i in range(len(container) - 1):
                    if book_name == container[i]:
                        container.remove(container[i])
                    else:
                        # 列表中的每个书名后面加换行符,用于写入文件时换行
                        container[i] = container[i] + '\n'
                # print(container)
                # 将书名删除后的内容以writelines写入文件中  writelines(可迭代)
                with open(b_path, 'w') as wwstream:
                    wwstream.writelines(container)
                print("删除成功")
        except Exception as err:
            print("错误原因:", err)
    

    借书

    '''
    遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    def borrow_book(username):
        while True:
            print("图书列表:")
            find_books(book_path)
            borrow_books = input("请选择图书:")
            try:
                with open('../user_books/user_books.txt') as rstream:
                    # 每次读取一行
                    lines = rstream.readline()
                    lines = lines.rstrip('\n')
                    # 将读到的内容通过空格分割保存到列表
                    lines = lines.split(' ')
                    # 判断输入的书是否已被借走
                    if borrow_books not in lines:
                        # print(lines)
                        # 借书之前先判断该用户之前是否借过,如果借过,就在后面累加图书,用,分割图书
                        # for user_book in lines:
                        if username in lines:
                            with open('../user_books/user_books.txt', 'a') as wstream:
                                # 判断之前是否借过某本书
                                if borrow_books not in lines:
                                    wstream.write(' {}'.format(borrow_books))
                                    print("借书成功")
                                    break
                                else:
                                    print("您已借过此书,请从新选择!")
                                    break
                        else:
                            # 将选择的图书与用户名一起保存到文件中
                            with open('../user_books/user_books.txt', 'a') as wstream:
                                wstream.write('\n{} {}\n'.format(username, borrow_books))
                                print("借书成功")
                                break
                    else:
                        print("<<{}>>已被用户{}借走,请重新选择~".format(borrow_books,lines[0]))
            except Exception as err:
                print("错误原因:", err)
    

    还书

    def return_book(username):
        try:
            with open('../user_books/user_books.txt') as rstream:
                # print("{}您已借阅,未归还图书如下:".format(username))
                # 读到的结果是列表
                lines = rstream.readlines()
                # 遍历列表,将里面的元素再拆分为列表
                for i in range(len(lines)):
                    # 去掉换行
                    lines[i] = lines[i].rstrip('\n')
                    lines[i] = lines[i].rstrip(' ')
                    lines[i] = lines[i].split(' ')
                    for ii in range(len(lines[i])-1):
                        # 只打印登录用户借阅的图书
                        if username == lines[i][0]:
                            print("{}您已借阅,未归还图书如下:".format(username))
                            print(lines[i][ii+1])
                            msg = input("请选择你要归还的图书:")
                            with open('../user_books/user_books.txt') as rstream:
                                lines = rstream.readlines()
                                for i in range(len(lines)):
                                    if username in lines[i] and msg in lines[i]:
                                        # 用空字符串替换msg,即表示删除归还的图书
                                        lines[i] = lines[i].replace(msg, '')
                                        with open('../user_books/user_books.txt', 'w') as wstream:
                                            # 将变更后的列表再写入文件,只变更当前用户的图书信息
                                            wstream.writelines(lines)
                                            print("归还成功!")
                                            break
    
                                with open('../user_books/user_books.txt') as rstream:
                                    lines = rstream.readlines()
                                    for i in range(len(lines)):
                                        lines[i] = lines[i].rstrip('\n')
                                        lines[i] = lines[i].rstrip(' ')
                                        lines[i] = lines[i].split(' ')
                                        # print(type(lines[i]))
                                        for ii in range(len(lines[i])):
                                            # 图书归还成功后判断列表中只有用户名了,如果只有用户名则将用户名用空字符串代替
                                            if username == lines[i][0] and len(lines[i]) == 1:
                                                lines[i][0] = lines[i][0].replace(lines[i][0], '')
                                                lines.append(lines[i][0])
                                    # print(lines)
                                    str = ''
                                    for i in range(len(lines)):
                                        for ii in range(len(lines[i])):
                                            # 将嵌套列表中的元素取出来拼接成字符串
                                            str += lines[i][ii] + ' '
                                        str += '\n'
                                    # 遍历完毕删除之前列表里面嵌套的列表,追加字符串str
                                    lines.clear()
                                    lines.append(str)
    
                                    # print(lines)
                                    # 将更新后的列表写入文件
                                    with open('../user_books/user_books.txt', 'w') as wstream:
                                        wstream.writelines(lines)
                        else:
                            print("您还没有借阅记录哦~")
    
        except Exception as err:
            print("错误原因:", err)
    

    查看个人信息

    '''
    遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    def look_person_info(path,username):
        with open(path) as rstream:
            lines = rstream.readlines()
            # print(lines)
            for info in lines:
                # 分割成一个列表
                info = info.split('   ')
                # print(info)
                if username in info:
                    print("----个人信息----")
                    print("用户名:", info[0])
                    print("邮箱:", info[1])
                    print("密码:", info[2].rstrip(' '))
                           
    

    修改个人信息

    def update_password(path,username):
        tips = input("请选择操作:\n 1.修改邮箱\n 2.修改密码\n")
    
        # 修改邮箱
        if tips =='1':
            new_email = ''
            line = []
            try:
                with open(path) as rstream:
                    while True:
                        line = rstream.readline()
                        if not line:
                            break
                        line = line.split('   ')
                        # 去掉密码后面的换行符
                        line[2] = line[2].rstrip('\n')
                        if username == line[0]:
                            new_email = input("请输入新邮箱:")
                            line[1] = new_email
                            break
            except Exception as err:
                print(err)
    
            else:
                # 将新修改邮箱后的用户的所有信息追加到文件夹
                with open(path, 'a') as wstream:
                    for i in range(len(line)):
                        if i == 0:
                            # 遍历列表,第一个列表元素需要前面需要加换行,后面需要加空格与其他元素分割
                            line[i] = '\n' + line[i] + '   '
                        else:
                            line[i] = line[i] + '   '
                    wstream.writelines(line)
                    print("修改成功")
                # 删除修改邮箱之前用户的信息
                with open(path) as rstream:
                    # 读取多行
                    lines = rstream.readlines()
                    i = 0
                    l = len(lines)
                    while i < l:
                        # 当 当前用户名在用户信息行且新的邮箱不在时就删除之前的用户信息,不会删除其他用户的信息
                        if username in lines[i] and new_email not in lines[i]:
                            lines.remove(lines[i])
                        i += 1
                        l -= 1
                    # 删除旧邮箱对应的当前用户信息后,再将新邮箱对应的用户信息以及其他用户的信息从新写入到文件
                    with open(path, 'w') as wstream:
                        wstream.writelines(lines)
        # 修改密码
        elif tips =='2':
            new_password = ''
            line = []
            try:
                with open(path) as rstream:
                    while True:
                        line = rstream.readline()
                        if not line:
                            break
                        line = line.split('   ')
                        # 去掉密码后面的换行符
                        line[2] = line[2].rstrip('\n')
                        if username == line[0]:
                            new_password = input("请输入新密码:")
                            # 判断新密码与旧密码是否一致
                            if new_password ==line[2]:
                                # 抛出异常
                                raise Exception("新密码不能与旧密码相同哦~")
                            else:
                                line[2] =new_password
                                break
            # 可以捕获到前面raise抛出的异常
            except Exception as err:
                print(err)
    
            else:
                # 将新修改密码后的用户的所有信息追加到文件夹
                with open(path,'a') as wstream:
                    for i in range(len(line)):
                        if i ==0:
                            # 遍历列表,第一个列表元素需要前面需要加换行,后面需要加空格与其他元素分割
                            line[i] = '\n'+line[i]+'   '
                        else:
                            line[i] = line[i] +'   '
                    wstream.writelines(line)
                    print("修改成功")
                # 删除修改密码之前用户的信息
                with open(path) as rstream:
                    # 读取多行
                    lines = rstream.readlines()
                    i =0
                    l = len(lines)
                    while i < l:
                        # 当 当前用户名在用户信息行且新的密码不在时就删除之前的用户信息,不会删除其他用户的信息
                        if username in lines[i] and new_password not in lines[i]:
                            lines.remove(lines[i])
                        i+=1
                        l-=1
                    # 删除旧密码对应的当前用户信息后,再将新密码对应的用户信息以及其他用户的信息从新写入到文件
                    with open(path,'w') as wstream:
                        wstream.writelines(lines)
    

    个人信息

    '''
    遇到问题没人解答?小编创建了一个Python学习交流QQ群:778463939
    寻找有志同道合的小伙伴,互帮互助,群里还有不错的视频学习教程和PDF电子书!
    '''
    def person_information(path,username):
        tips = input("请选择操作:\n 1.查看个人信息\n 2.修改个人信息\n")
        if tips =='1':
            look_person_info(path,username)
        elif tips =='2':
            update_password(path, username)
    

    只有管理员才可以进行图书的增删改操作

    def permission(user_path,username):
        try:
            with open(user_path) as rstream:
                while True:
                    line = rstream.readline()
                    # 读到空行跳出循环
                    if not line:
                        break
                    # 通过3个空格将字符串line分割为一个列表,存储三个值
                    line = line.split('   ')
                    # 循环遍历列表,去掉列表中每个元素后面的换行,如果有就去掉,没有就不取掉
                    for i in range(len(line)):
                        line[i] = line[i].rstrip('\n')
                    # 判断是否管理员,如果是就可以进行添加操作
                    if username == 'admin123':
                        pass
                    else:
                        print("只有管理员{}才可以进行该操作~".format(username))
                        # 不是管理员将回到操作页面
                        operate(path, username)
        except Exception as err:
            print("错误原因:",err)
    

    图书增删改借还操作

    book_path = r'/Users/mozili/PYTHONWORKSPACE/book.txt'
    # book_list = ['水浒传\n','红楼梦\n','廊桥遗梦']
    def operate(b_path,username):
        while True:
            msg = input("请选择操作:\n 1.查询图书\n 2.添加图书\n 3.修改图书\n 4.删除图书\n 5.借书\n 6.归还图书\n 7.个人信息\n 8.退出登录\n")
            # 查询图书
            if msg =='1':
                find_books(book_path)
            # 添加图书
            elif msg =='2':
                add_book(b_path, username)
            # 修改图书
            elif msg =='3':
                update_book(b_path, username)
            # 删除图书
            elif msg =='4':
                del_book(b_path, username)
            # 借书
            elif msg =='5':
                borrow_book(username)
            # 还书
            elif msg =='6':
                return_book(username)
            #查看、修改个人信息
            elif msg =='7':
                person_information(path, username)
    
            # 退出登录
            elif msg =='8':
                msg = input("确定退出登录吗?(yes/no)")
                if msg == 'yes':
                    break
    
    
    
    login()
    

    结尾给大家推荐一个非常好的学习教程,希望对你学习Python有帮助!

    Python基础入门教程推荐:更多Python视频教程-关注B站:Python学习者

    【Python教程】全网最容易听懂的1000集python系统学习教程(答疑在最后四期,满满干货)

    Python爬虫案例教程推荐:更多Python视频教程-关注B站:Python学习者

    2021年Python最新最全100个爬虫完整案例教程,数据分析,数据可视化,记得收藏哦

    展开全文
  • Python 获取Windows管理权限

    万次阅读 2018-10-18 16:05:15
    最近在写一个可以自动更换 hosts 的 python 脚本,但是操作 hosts 需要管理权限 ,所以就想着要怎么获取。 总结了一下,有三种方法可以获取,下面分别介绍一下。 1. 以管理员运行 cmd 这个方法很简单,也无需多说...

    最近在写一个可以自动更换 hosts 的 python 脚本,但是操作 hosts 需要管理员权限 ,所以就想着要怎么获取。

    总结了一下,有三种方法可以获取,下面分别介绍一下。

    1. 以管理员运行 cmd

    这个方法很简单,也无需多说,右键以管理员运行就可以了,然后在里面运行 python 脚本就有管理员权限了。

    2. 用 cmd 脚本获取

    假设我要运行的文件是 test.py,则我可以写一个 cmd 脚本,不妨叫做 go.cmd,在里面写入:

    @echo off
    %1 mshta vbscript:CreateObject("Shell.Application").ShellExecute("cmd.exe","/c %~s0 ::","","runas",1)(window.close)&&exit
    cd /d "%~dp0"
    
    start python test.py
    

    保存,与 test.py 放在同一文件夹,双击 go.cmd 运行,会弹出提示,点击“是”就会以管理员运行 test.py 了。

    3. 用 python 代码获取

    以上两种方法都能用,但是总觉得不够优雅,所以接下来我找到了一种可以直接用 python 代码直接获取管理员权限的方法,可以说是相当优雅了。

    以下代码来源:python如果获取windows管理员权限(一)

    from __future__ import print_function
    import ctypes, sys
    
    def is_admin():
        try:
            return ctypes.windll.shell32.IsUserAnAdmin()
        except:
            return False
    if is_admin():
        # 将要运行的代码加到这里
    else:
        if sys.version_info[0] == 3:
            ctypes.windll.shell32.ShellExecuteW(None, "runas", sys.executable, __file__, None, 1)
        else:#in python2.x
            ctypes.windll.shell32.ShellExecuteW(None, u"runas", unicode(sys.executable), unicode(__file__), None, 1)
    

    以上代码运行时先判断是否拥有管理员权限,如果没有,则调用那个函数获取权限以后再运行一次代码,所以如果在命令行中运行的话,会再弹出一个小黑框。而且根据原博客,这个不能在 IDE 中运行,但是我没有 IDE ,所以没有进行测试。

    4. 不弹出UAC解决方法

    有的人可能使用上面的 2 和 3 方法发现不会弹出授权弹框,这可能是因为系统的 UAC 被关掉了,按照以下步骤开启:

    1. win + R,在运行框里输入 msconfig.
    2. 点击 工具,然后点击 更改UAC设置,再点击 右下方的启动.
    3. 将通知调整到 始终通知.

    这里也有图文教程:win10系统如何开启UAC

    展开全文
  • Python - 文件管理系统

    千次阅读 2019-09-28 14:19:45
    一、概述 ...果不其然,第二个需求就来了,需要帮公司再写一个文件管理系统。 二、过程 1. 由于公司属于跟钱有关的行业,监管严格。所以公司的所有电脑U盘,网盘全都被限制了。不要说把公司的...

    一、概述

    前段时间帮公司写了一个资产管理的网站,(https://www.cnblogs.com/ddzj01/p/11316837.html),系统运行的比较稳定,小白的第一个项目得到了领导的肯定。果不其然,第二个需求就来了,需要帮公司再写一个文件管理的系统。

     

    二、过程

    1. 由于公司属于跟钱有关的行业,监管严格。所以公司的所有电脑U盘,网盘全都被限制了。不要说把公司的文件拷走,就连从外网把文件拷贝到公司的电脑上都不行,但实际上这个需求是有的,这咋办呢?
    2. 以前的办法是如果需要拷贝文件到公司电脑,需要填申请单,层层审批,最后把u盘交给管理员,管理员再把文件拷进来,这他妈的是多么蛋疼的做法!
    3. 所以亟需一个网站解决这个问题。现在通过开放几台公共电脑的U盘端口,用户可以通过自己的U盘在该电脑上传文件,上传的文件全部集中存放在公司的存储服务器中,然后在自己的办公电脑下载。监察员通过网站能够查看到每一个用户的上传下载记录。这样就解决了用户自由上传下载,又能实现留痕的功能。


    三、网站介绍

    网站角色定义

    普通用户:可以上传下载自己的文件
    监察员用户:可以上传自己的文件,可以下载任何人的文件,可以查看任何人的上传下载记录
    管理员用户:可以上传下载自己的文件,可以添加用户和分配用户权限,可以限制指定ip上传

     

    网站各项页面如何显示

    A、文件列表页
    监察员登陆
    1. 能看到所有人的文件
    2. 可以通过文件名或者用户名去搜索文件或搜索该用户名的所有文件
    3. 有导出列表功能

    普通用户或管理员登陆
    1. 只能看到自己的文件
    2. 只能通过文件名去搜索文件
    3. 无导出功能

    B、人员管理
    1. 只有管理员才有这个页面
    2. 管理员可以添加人员,重置人员密码

    C、日志记录
    1. 只有监察员才有这个页面

    D、设置
    1. 只有管理员才有这个页面
    2. 指定能够上传文件的ip


    四、相关截图

    项目地址:https://github.com/YangBaohust/wjgl

    loginlistuploadpersonlistsettingloglist


    五、总结

    当我发现我第一个python项目在github上面竟然有别人在用的时候,不知道有多开心,这算是对自己的一个鼓励吧。

    转载于:https://www.cnblogs.com/ddzj01/p/11452940.html

    展开全文
  • Python实现管理权限运行CMD指令

    万次阅读 热门讨论 2019-03-04 16:18:33
    Python执行 cmd指令属于外部调用,subprocess.Popen 方法即可,实现如下: # !/usr/bin/python3 # coding: utf-8 import subprocess def command(cmd, timeout=1800000): try: sp = subprocess.Pope...

    一、subprocess.Popen

     Python执行 cmd指令属于外部调用,subprocess.Popen 方法即可,实现如下:

    # !/usr/bin/python3
    # coding: utf-8
    import subprocess
    
    
    def command(cmd, timeout=1800000):
        try:
            sp = subprocess.Popen(
                cmd,
                shell=True,
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE
            )
            print("[PID] %s: %s" % (sp.pid, cmd))
            sp.wait(timeout=timeout)
    
            stderr = str(sp.stderr.read().decode("gbk")).strip()
            stdout = str(sp.stdout.read().decode("gbk")).strip()
            if "" != stderr:
                raise Exception(stderr)
            if stdout.find("失败") > -1:
                raise Exception(stdout)
        except Exception as e:
            raise e
    

    参考资料

    《Python脚本以管理员权限运行》

     

    二、bat 获取管理员权限

    但当系统权限不足时,肿么办?

    先看传统 bat的处理方式:

    @echo off 
    echo get admin rights
    cacls.exe "%SystemDrive%\System Volume Information" >nul 2>nul
    if %errorlevel%==0 goto isAdmin
    
    if exist "%temp%\getAdmin.vbs" del /f /q "%temp%\getAdmin.vbs"
    echo Set shell = CreateObject^("Shell.Application"^)>"%temp%\getAdmin.vbs"
    echo shell.ShellExecute "%~s0","","","runas",1 >>"%temp%\getAdmin.vbs"
    echo WScript.Quit >>"%temp%\getAdmin.vbs"
    "%temp%\getAdmin.vbs" /f
    if exist "%temp%\getAdmin.vbs" del /f /q "%temp%\getAdmin.vbs"
    exit
    
    :isAdmin
    sc stop WebClient
    pause

    这段代码的主要流程:

    1、调用 cacls.exe 程序查询“系统卷标信息”,验证是否具备管理员权限

    2、不具备管理员权限时创建getAdmin.vbs脚本,脚本内容如下

    Set shell = CreateObject("Shell.Application")
    shell.ShellExecute "%~s0","","","runas",1
    WScript.Quit

    3、强制执行这个 getAdmin.vbs脚本

    4、删除 getAdmin.vbs脚本文件 并退出

     

    那么getAdmin.vbs脚本又做了什么呢?

    脚本内容只有三行

    ① Set shell = CreateObject("Shell.Application") 创建 Shell对象

    ② 以管理员权限运行当前脚本(bat脚本),其中参数 "%~s0" 是当前脚本的绝对路径,"runas" 是 shell指令 runas,"1"是管理员权限

    ③ 脚本退出

     

    总体流程就是 bat在权限不足情况下创建了一个 vb脚本,让 vb脚本反向调用bat

     

    三、Python 的曲线救国

    想要做一个工具类,可以实现任意 cmd指令的管理员权限下的执行

    挖坑式的自造轮子:

    ① 创建一个空的 bat文件,动态写入cmd指令

    ② 创建一个固定内容的 vb脚本

    ③ Python调用 vb脚本, vb 调用 bat

     

    1、文件结构

     

    2、../tool/script/shell.vbs

    cwd = CreateObject("Scripting.FileSystemObject").GetFile(Wscript.ScriptFullName).ParentFolder.Path
    path = cwd & "\cmd.bat"
    
    Set shell = CreateObject("Shell.Application")
    shell.ShellExecute path,"","","runas",1
    
    WScript.Quit

    参考资料

    《VBS获取当前路径的两个方法》 

    《VBS中字符串拼接 & 与 + 的区别》

     

    3、方法实现

     工具方法 runAdmin 实现代码如下:

    注意:因 cmd指令是动态写入文件,固 runAdmin 方法不支持并发,调用时要加线程锁

    # !/usr/bin/python3
    # coding: utf-8
    import os
    import subprocess
    import traceback
    
    
    def runAdmin(cmd, timeout=1800000):
        f = None
        try:
            bat = os.getcwd() + r"\tool\script\cmd.bat"
            f = open(bat, 'w')
            f.write(cmd)
        except Exception as e:
            traceback.print_exc()
            raise e
        finally:
            if f:
                f.close()
    
        try:
            shell = os.getcwd() + r"\tool\script\shell.vbs"
            sp = subprocess.Popen(
                shell,
                shell=True,
                stdout=subprocess.PIPE,
                stderr=subprocess.PIPE
            )
            print("[PID] %s: %s" % (sp.pid, cmd))
            sp.wait(timeout=timeout)
    
            stderr = str(sp.stderr.read().decode("gbk")).strip()
            stdout = str(sp.stdout.read().decode("gbk")).strip()
            if "" != stderr:
                raise Exception(stderr)
            if stdout.find("失败") > -1:
                raise Exception(stdout)
        except Exception as e:
            raise e
    

     

     

    如有纰漏,敬请@

     

     

     

    展开全文
  • python内存管理

    千次阅读 2017-02-03 17:21:05
    但是让我吃惊的时候,这是一本将垃圾回收的书,但是在它的实现篇里居然对python的内存管理有比较深入的讲解。今天有空,又细细结合python 3.6的代码看了一遍。在这里写下我的这个读书笔记。intro上面是我结合书中的...
  • python如果获取windows管理权限(一)

    万次阅读 多人点赞 2018-01-08 20:06:35
    我们在运行我们编写好的python代码时,会碰到这样的报错问题 PermissionError: [WinError 5] 拒绝访问。 这是因为我们编写的脚本的权限不够。一种解决办法是在管理员cmd中运行我们的脚本(右键以 run as ...
  • python用Django实现简单的web版学生信息管理系统,对于python的Django的简单应用
  • python如果获取windows管理权限(二)

    万次阅读 多人点赞 2018-01-08 20:14:21
    我们在python如果获取windows管理权限(一)中谈到了UAC的问题。 很多时候我们不希望我们的软件弹出UAC提示,这个时候我们可以通过注册表的方法去解决。这其实已经不在是一个安全的编程了,它变成了一把双刃剑...
  • Python基础项目:学生信息管理系统

    千次阅读 2019-04-17 13:36:21
    经过上一个例子学习,同学们应该已经掌握了我在前面提到的知识点,如语句,函数和列表等内容,本章将在上一章基础上对于Python的基础语法进行操作理解,本章的实际案例为学生信息管理系统,主要输入输出依然通过...
  • 基于 Python Flask Web 框架实现完整的角色管理系统,包含用户管理、角色管理、机构管理、资源管理等。 本场 Chat 主要内容: 深度阐述用户、角色、资源等之间的关系; Python 虚拟环境 VirtualEnv 介绍; Flask ...
  • 基于python的学生信息管理系统

    千次阅读 多人点赞 2020-12-27 16:22:52
    完整代码 import pymysql index=''' +---------------------+ 首页 欢迎来到学生信息管理系统 1.登陆 2.注册 3.quit(按任意键退出) +---------------------+ ''' login=''' +------
  • python实现学生成绩管理系统

    万次阅读 多人点赞 2019-04-29 08:38:52
    学生成绩管理系统,带权限 作者:wf 版本:终版 面向对象,带日志,带异常处理的,带密码加密 初始数据库带100条数据 第一次执行会生成数据库和日志文件,以后添加的数据会自动保存到里面 删除数据库再次执行...
  • python+mysql实现个人论文管理系统

    千次阅读 多人点赞 2019-03-27 19:47:41
    1.mysql数据库建表 在mysql数据库里面建立两个表,分别是用户表和论文表。建表的方式有很多,可以直接用sql语句进行建表,也可以在Navicat里面直接建,在Navicat...本次系统的实现主要用到python的pymysql库来连接...
  • 基于Python的学生成绩管理系统

    千次阅读 多人点赞 2021-08-05 23:04:34
    将现代的计算机技术和传统的学生成绩管理工作相结合,并按照高校学生成绩管理工作流程,设计完成一套功能较为完备的高校学生成绩系统。为了使系统在高校学生成绩管理工作中发挥更大的作用,实现工作过程的计算机化,...
  • python+django+bootstrap实现的管理系统,注释全,功能强大,又文档说明,导入即可查看源码,初学者必备
  • Python Django项目日志查询系统

    万次阅读 2020-08-07 18:06:11
    该项目适合中小型公司日志查询工作。大型公司可以使用elk等。 日志查询系统 维护手册 作者:陈土锋 ...
  • Python 系统监控管理模块psutil学习

    千次阅读 2017-07-09 00:16:32
    简介psutil,是python system and process utilities的缩写,意思python系统监控及进程的管理的工具,是一个功能很强大的跨平台的系统管理库。可以实现命令行中类似ps、top、lsof、netstat、ifconfig、who、df、...
  • Python 的优点 人们为何使用python  1、软件质量  python更加注重可读性,一致性和软件质量、  即使代码并非你写,python的可读性也保证了其代码易于理解。  而且python支持软件开发的高级重用机制,如 OOP 面向...
  • 目录Python基础知识详解(十)小结,用python实现教师信息管理系统源代码 Python基础知识详解(十)小结,用python实现教师信息管理系统 这个系统其实是本人之前完成的c语言课程设计的实验报告,用了600多行c语言...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 96,087
精华内容 38,434
关键字:

python权限管理系统

python 订阅