Ubuntu下用Python从文件创建用户与密码遇chpasswd错误求助
问题分析与修复
你的代码存在几个关键问题,直接导致了chpasswd报错,逐一解决如下:
嵌套循环逻辑错误
两层嵌套循环会让第一个用户重复创建两次(对应两个密码),第二个用户完全不会被处理——因为passwords.txt的文件指针读完第一次就到末尾了,不会再从头读取。正确逻辑是按顺序一一对应,第一个用户匹配第一个密码,第二个用户匹配第二个密码。字符串拼接与chpasswd格式错误
chpasswd要求输入格式为username:password,你的代码里echo +line +passw是错误写法:既没有正确拼接变量,也没按要求用冒号分隔。另外读取文件时每行末尾会自带换行符,必须用strip()去掉,否则用户名/密码里的换行符会导致命令执行失败。多余的pass语句
外层循环里的pass完全无用,直接跳过了对当前行的初始处理,删掉即可。
修正后的代码
import os # 读取两个文件内容,按行一一对应 with open("users.txt", 'r') as user_file, open("passwords.txt", 'r') as pass_file: # 读取每行并去除换行符,整理成列表 users = [line.strip() for line in user_file] passwords = [line.strip() for line in pass_file] # 遍历每一对用户和密码 for user, pwd in zip(users, passwords): # 创建用户 os.system(f'useradd {user}') # 按chpasswd要求的格式传递参数 os.system(f'echo "{user}:{pwd}" | chpasswd')
额外说明
- 运行脚本需要root权限,否则
useradd和chpasswd会因权限不足报错。 - 如果两个文件行数不一致,
zip()会以较短的文件为准,多余的行不会被处理。 - 使用f-string(Python3.6+支持)拼接命令比传统的
+更清晰,能避免大量字符串拼接错误。
内容的提问来源于stack exchange,提问作者Avinash Babu
相关产品推荐
相关产品推荐

