因此,我创建了一个可以更改UNIX用户密码的功能,它的工作原理很好,但是我想for循环用户列表以更改每个用户密码。但是for循环在该函数中不起作用,当我在列表中为同一用户分配变量时,它仅在循环中不起作用
User.txt
FakeAccount
FakeUser
Python函数
def change_password(username, new_password):
process = pexpect.spawn("sudo passwd " + username)
process.expect("Enter new UNIX password: ")
process.sendline(new_password)
process.expect("Retype new UNIX password: ")
process.sendline(new_password)
process.close()
用于循环
np = "test"
f = open('User.txt', 'r')
for line in f:
change_password(line.strip("\n\r"), np)
print('done')
f.close()
我想做的是遍历文件,并将其放置在用户名变量中,当我运行代码时没有错误,但是当我尝试登录这些帐户时,它们的密码保持不变,当我运行python脚本时,我是root用户,因此没有sudo密码提示。
根据我的尝试,我认为是问题所在
我认为如果在循环文件过程中到处存在问题,因为如果我运行此代码,它会完美运行
import pexpect
def change_password(username, new_password):
process = pexpect.spawn("sudo passwd " + username)
process.expect("Enter new UNIX password: ")
process.sendline(new_password)
process.expect("Retype new UNIX password: ")
process.sendline(new_password)
process.close()
np = "test"
U = "FakeUser"
change_password(U, np)
只有当我遇到问题时才引入for循环,并且据我所知,它与我在测试示例中键入的用户名相同,因为要测试我是否尝试过
f = open('User.txt', 'r')
for line in f:
print("'" + line.strip("\n\r") + "'")
并得到结果'FakeAccount'和'FakeUser',这意味着用户名正确,for循环是否可能会快速运行而不通过终端发送然后发送?还是我缺少东西?
答案 0 :(得分:0)
乍一看,在我看来问题出在文件打开。试试这个:
np = "test"
with open('User.txt', 'r', encoding='UTF-8') as f:
lines = [l for l in f.read().split("\n") if l != ""]
f.close()
for l in lines:
change_password(l, np)
print('done')
答案 1 :(得分:0)
因此,在经过许多不同的测试并改变了一切之后,它现在可以完美地工作了,问题是我需要在python3中运行它,还需要给我一些时间来处理命令,而我需要放置一个时间。sleep(5)在功能运行完之后。