python-2.7 - 如何删除元素并更改python中的特定元素?
问题描述
我正在编写一个 Python 程序来管理 FreeRadius 用户帐户。我可以在我的程序中添加新用户,但在输入目标用户的用户名和密码后无法删除用户。另外,我无法更改用户的密码。
我应该如何更改我的编码以删除用户并提供密码更改功能?
#!usr/bin/python
from Tkinter import *
import ttk
import os
import subprocess
import commands
main = Tk()
main.title("FreeRadius Windows Administration Controller GUI")
main.geometry('1280x800')
rows = 0
while rows < 50:
main.rowconfigure(rows, weight=1)
main.columnconfigure(rows, weight=1)
rows += 1
def startlog():
f = open('C:/FreeRADIUS.net/var/log/radius/radius.log', 'r')
file_contents = f.read()
txtarea_output.insert(INSERT, file_contents)
print (file_contents)
f.close()
def resetlog():
txtarea_output.delete(1.0,END)
def adduser():
fh = open('C:/FreeRADIUS.net/etc/raddb/users.conf', 'a')
fh.write("\n")
fh.write(createuserentry.get() + " " + "User-Password == " + '"' + createuserpwd.get() + '"')
fh.close()
def deleteuser():
with open('C:/FreeRADIUS.net/etc/raddb/users.conf', "r")
lines = fh.readlines()
with open('C:/FreeRADIUS.net/etc/raddb/users.conf', "a")
for line in lines:
if deleteuserentry.get() in line:
continue
fh.write(line)
def cpwd():
with open('C:/FreeRADIUS.net/etc/raddb/users.conf', "r")
lines = fh.readlines()
with open('C:/FreeRADIUS.net/etc/raddb/users.conf', "a")
for line in lines:
if changeuserpwd.get() in line:
continue
fh.write(line)
nb = ttk.Notebook(main)
nb.grid(row=1, column=0, columnspan=40, rowspan=39, sticky='NESW')
page1 = ttk.Frame(nb)
nb.add(page1, text='User Account Management')
createuser = ttk.Label(page1, text="Create User").grid(column=0, row=0, sticky='W')
createusername = ttk.Label(page1, text="Enter new user's username:").grid(column=0, row=1, sticky='W')
createuserentry = ttk.Entry(page1)
createuserentry.grid(row=1, column=1, columnspan=2)
createuserpassword = ttk.Label(page1, text="Enter new user's password:").grid(column=0, row=2, sticky='W')
createuserpwd = ttk.Entry(page1)
createuserpwd.grid(row=2, column=1, columnspan=2)
createuserconfirm = Button(page1, text='Create this User', borderwidth=2, command=adduser)
createuserconfirm.grid(row=3, column=0, sticky='W')
ttk.Label(page1, text="").grid(column=0, row=4, sticky='W')
deleteteuser = ttk.Label(page1, text="Delete User").grid(column=0, row=5, sticky='W')
deleteusername = ttk.Label(page1, text="Enter current user's username:").grid(column=0, row=6, sticky='W')
deleteuserentry = ttk.Entry(page1)
deleteuserentry.grid(row=6, column=1, columnspan=2)
deleteuserpassword = ttk.Label(page1, text="Enter current user's password:").grid(column=0, row=7, sticky='W')
deleteuserpwd = ttk.Entry(page1)
deleteuserpwd.grid(row=7, column=1, columnspan=2)
deleteuserconfirm = Button(page1, text='Deletete this User', borderwidth=2, command=deleteuser)
deleteuserconfirm.grid(row=8, column=0, sticky='W')
ttk.Label(page1, text="").grid(column=0, row=9, sticky='W')
changepwd = ttk.Label(page1, text="Change User's password").grid(column=0, row=10, sticky='W')
changepwdusername = ttk.Label(page1, text="Enter user's username:").grid(column=0, row=11, sticky='W')
changepwduserentry = ttk.Entry(page1)
changepwduserentry.grid(row=11, column=1, columnspan=2)
changepwduserpassword = ttk.Label(page1, text="Enter user's current password:").grid(column=0, row=12, sticky='W')
changepwduserpwd = ttk.Entry(page1)
changepwduserpwd.grid(row=12, column=1, columnspan=2)
changepwdusernewpwd = ttk.Label(page1, text="Enter user's new password:").grid(column=0, row=13, sticky='W')
changepwdusernewpwd = ttk.Entry(page1)
changepwdusernewpwd.grid(row=13, column=1, columnspan=2)
changepwduserconfirm = Button(page1, text='Change Password', borderwidth=2, command = cpwd)
changepwduserconfirm.grid(row=14, column=0, sticky='W')
预期输出:
- 用户被删除
- 用户密码已更改
实际输出:无效语法
解决方案
您的代码存在以下语法问题:
- 没有适当的缩进。当您在问题中发布代码时,它们可能已被删除。无论如何,检查它们;
- 你的
with
陈述缺失as fh
和:
结束
此外还有其他问题:
- 删除或更改配置文件时,您应该打开它以写入,而不是附加,因为您将重新创建它。所以参数应该是
w
; - 可能存在错误的删除或更改,因为您检查了整个配置行的用户名或密码,而不是解析它并检查确切的字段。如果某个用户的密码与另一个用户的名称相同,那么当您删除另一个用户时,您将同时删除这两个用户。这部分代码我没有修复,留给你
未经测试的更正代码如下:
#!usr/bin/python
from Tkinter import *
import ttk
import os
import subprocess
import commands
main = Tk()
main.title("FreeRadius Windows Administration Controller GUI")
main.geometry('1280x800')
rows = 0
while rows < 50:
main.rowconfigure(rows, weight=1)
main.columnconfigure(rows, weight=1)
rows += 1
def startlog():
f = open('C:/FreeRADIUS.net/var/log/radius/radius.log', 'r')
file_contents = f.read()
txtarea_output.insert(INSERT, file_contents)
print (file_contents)
f.close()
def resetlog():
txtarea_output.delete(1.0,END)
def adduser():
fh = open('C:/FreeRADIUS.net/etc/raddb/users.conf', 'a')
fh.write("\n")
fh.write(createuserentry.get() + " " + "User-Password == " + '"' + createuserpwd.get() + '"')
fh.close()
def deleteuser():
with open('C:/FreeRADIUS.net/etc/raddb/users.conf', "r") as fh:
lines = fh.readlines()
with open('C:/FreeRADIUS.net/etc/raddb/users.conf', "w") as fh:
for line in lines:
if deleteuserentry.get() in line: continue
fh.write(line)
def cpwd():
with open('C:/FreeRADIUS.net/etc/raddb/users.conf', "r") as fh:
lines = fh.readlines()
with open('C:/FreeRADIUS.net/etc/raddb/users.conf', "w") as fh:
for line in lines:
if changeuserpwd.get() in line:
fh.write(changepwduserentry.get() + " " + "User-Password == " + '"' + changepwdusernewpwd.get() + '"')
else:
fh.write(line)
nb = ttk.Notebook(main)
nb.grid(row=1, column=0, columnspan=40, rowspan=39, sticky='NESW')
page1 = ttk.Frame(nb)
nb.add(page1, text='User Account Management')
createuser = ttk.Label(page1, text="Create User").grid(column=0, row=0, sticky='W')
createusername = ttk.Label(page1, text="Enter new user's username:").grid(column=0, row=1, sticky='W')
createuserentry = ttk.Entry(page1)
createuserentry.grid(row=1, column=1, columnspan=2)
createuserpassword = ttk.Label(page1, text="Enter new user's password:").grid(column=0, row=2, sticky='W')
createuserpwd = ttk.Entry(page1)
createuserpwd.grid(row=2, column=1, columnspan=2)
createuserconfirm = Button(page1, text='Create this User', borderwidth=2, command=adduser)
createuserconfirm.grid(row=3, column=0, sticky='W')
ttk.Label(page1, text="").grid(column=0, row=4, sticky='W')
deleteteuser = ttk.Label(page1, text="Delete User").grid(column=0, row=5, sticky='W')
deleteusername = ttk.Label(page1, text="Enter current user's username:").grid(column=0, row=6, sticky='W')
deleteuserentry = ttk.Entry(page1)
deleteuserentry.grid(row=6, column=1, columnspan=2)
deleteuserpassword = ttk.Label(page1, text="Enter current user's password:").grid(column=0, row=7, sticky='W')
deleteuserpwd = ttk.Entry(page1)
deleteuserpwd.grid(row=7, column=1, columnspan=2)
deleteuserconfirm = Button(page1, text='Deletete this User', borderwidth=2, command=deleteuser)
deleteuserconfirm.grid(row=8, column=0, sticky='W')
ttk.Label(page1, text="").grid(column=0, row=9, sticky='W')
changepwd = ttk.Label(page1, text="Change User's password").grid(column=0, row=10, sticky='W')
changepwdusername = ttk.Label(page1, text="Enter user's username:").grid(column=0, row=11, sticky='W')
changepwduserentry = ttk.Entry(page1)
changepwduserentry.grid(row=11, column=1, columnspan=2)
changepwduserpassword = ttk.Label(page1, text="Enter user's current password:").grid(column=0, row=12, sticky='W')
changepwduserpwd = ttk.Entry(page1)
changepwduserpwd.grid(row=12, column=1, columnspan=2)
changepwdusernewpwd = ttk.Label(page1, text="Enter user's new password:").grid(column=0, row=13, sticky='W')
changepwdusernewpwd = ttk.Entry(page1)
changepwdusernewpwd.grid(row=13, column=1, columnspan=2)
changepwduserconfirm = Button(page1, text='Change Password', borderwidth=2, command = cpwd)
changepwduserconfirm.grid(row=14, column=0, sticky='W')
推荐阅读
- web-scraping - 允许处理/迭代/查询科学文章的免费 API/库(即 Google Scholar)?
- javascript - 如何让 Flex 在我的 react 应用程序中工作?
- python - 我应该如何创建为使用 scipy.optimize.least-squares 拟合阻抗数据提供残差的函数?
- c - 使用C中的文本文件登录系统
- python - Marshmallow SQLAlchemy 加载而不与数据库交互
- ios - 想要从只有图像名称的 api 将图像显示到 tableview 单元格中
- java - 是否可以通过它的键来同步 ConcurrentHashMap 更新?
- ios - 目前需要什么模拟器给苹果应用商店截图
- java - 如何在 Hibernate(没有 Spring)中修复“JUnit 测试后的回滚数据库操作”?
- rabbitmq - Windows 10 上损坏的 vanilla RabbitMQ 安装