useradd脚本无法正常工作

时间:2016-04-11 19:05:45

标签: python bash

我正在编写一个脚本,允许用户将信息放在文本文件中,例如

Alice;McCormick;ballstate;2000;3457

使用此格式

FirstName;LastName;Password;UID;GID
import os
import hashlib
iFile = open(“NewUsers.txt”, “rt”)
fileContents = iFile.readlines()
Username =””
fname=””
lname=””
password=""
uid=""
gid=""

for line in fileContents:
    items = line.split(‘;’)
    fname = items[0].lower()
    lname = items[1].lower()
    username = fname[0]+lname[0:7]
    password = hashlib.sha256(items[2]).hexdigest()
    uid = items[3]
    gid = items[4]
    os.system("/usr/sbin/useradd -p " + password + " -u " + uid + " -g " + gid + username)

我创建了一个名为3000的组,其groupid为3457,因此它已经存在。当我运行脚本时,我得到以下输出。

用法:useradd [options] LOGIN        useradd -D        useradd -D [options]

选项:列出在执行useradd时可以使用的所有可用选项

下面我收到sh:2:amccormi:not found

1 个答案:

答案 0 :(得分:0)

  

我从未将命令行保存为变量你只是将其保存为字符串吗?

您正在将字符串传递给div,所以您可以将其保存为字符串:

os.system

然后你可以把它打印出来:

cmd = "/usr/sbin/useradd -p " + password + " -u " + uid + " -g " + gid + username

在将其传递给print "running command:", cmd 之前:

os.system

你最终会发现,当你这样做时:

os.system(cmd)

变量>>> iFile = open('data') >>> fileContents = iFile.readlines() >>> for line in fileContents: ... items = line.split(';') ... print items 最终将包含以下内容:

items

查看该列表中的最后一项,即['Alice', 'McCormick', 'ballstate', '2000', '3457\n'] 。它包含一个 换行符,表示在构建命令行时 这样:

3457\n

您最终将以下内容传递给os.system("/usr/sbin/useradd -p " + password + " -u " + uid + " -g " + gid + username)

/bin/sh

希望在这一点上很清楚为什么你会收到错误 你已经描述过了。

有几种方法可以解决这个问题。最简单的是 可能会调用/usr/bin/useradd -p ballstate -u 2000 -g 3457 amccormi ,这将删除空格 - 包括换行符 - 在字符串的开头和结尾:

line.strip()