Python函数工作正常,但在for循环时不起作用

时间:2018-09-28 20:40:51

标签: python linux python-2.7 for-loop pexpect

因此,我创建了一个可以更改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循环是否可能会快速运行而不通过终端发送然后发送?还是我缺少东西?

2 个答案:

答案 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)在功能运行完之后。