我正在编写一个脚本,允许用户将信息放在文本文件中,例如
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
答案 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()