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) 时,之后顺利地 运行 。