Python 函数工作正常但在 for 循环时不起作用
Python Function Works just fine but doesnt work when for looped
所以我创建了这个更改 UNIX 用户密码的函数,它工作得很好,但我想循环一个用户列表来更改每个用户的密码。但是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()
For循环
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 循环是否会很快而不是通过终端发送?还是我遗漏了什么?
乍一看,问题似乎出在文件打开上。试试这个:
np = "test"
with open('User.txt', 'r', encoding='UTF-8') as f:
lines = [l for l in f.read().split("\n") if l]
for l in lines:
change_password(l, np)
print('done')
因此,经过多次不同的测试和更改后,它现在可以完美运行,问题是我需要 运行 它在 python3 中,并给它一些时间来处理命令,当我在函数中放入 time.sleep(5) 时,之后顺利地 运行 。
所以我创建了这个更改 UNIX 用户密码的函数,它工作得很好,但我想循环一个用户列表来更改每个用户的密码。但是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()
For循环
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 循环是否会很快而不是通过终端发送?还是我遗漏了什么?
乍一看,问题似乎出在文件打开上。试试这个:
np = "test"
with open('User.txt', 'r', encoding='UTF-8') as f:
lines = [l for l in f.read().split("\n") if l]
for l in lines:
change_password(l, np)
print('done')
因此,经过多次不同的测试和更改后,它现在可以完美运行,问题是我需要 运行 它在 python3 中,并给它一些时间来处理命令,当我在函数中放入 time.sleep(5) 时,之后顺利地 运行 。