【发布时间】:2015-03-27 01:17:44
【问题描述】:
我正在尝试在 FreeBSD 上使用 Python 2.7 编写系统管理脚本,但在添加用户密码时,我一直在尝试以编程方式设置用户密码。我正在使用 FreeBSD pw 命令,它有一个 -h 标志,它接受文件描述符作为参数。
我采取的路线是使用 Python 的 subprocess 模块,但我
似乎被困在 Python 将所有内容都视为字符串
并且 pw -h 选项期望返回 fd(文件描述符)。
我要运行的命令是:
/usr/sbin/pw useradd foobar2 -C /usr/local/etc/bsdmanage/etc/pw.conf -m -c "BSDmanage foobar2 user" -G foobar2-www -h
我这样做是通过:
objTempPassFile = open(strTempDir + 'foobar.txt', 'w+')
objTempPassFile.write(strTempPass)
objTempPassFile.seek(0)
listCmdArgs = shlex.split(strPwUserCmd)
processUser = subprocess.Popen(listCmdArgs,stdin=objTempPassFile.fileno(),stdout=subprocess.PIPE,stderr=subprocess.PIPE)
strOutPut, strErrorValue = processUser.communicate()
strPwUserCmd 是上面的 pw 命令,strTempPass 只是一个字符串。
我还尝试将密码字符串作为选项传递给Popen.communicate(),并将标准输入更改为stdin=subprocess.PIPE
我也尝试过使用 StringIO 对象。但是,传递它会得到关于它不是有效 I/O 对象的错误,或者 pw 命令失败并且看不到任何传递给 -h 开关的参数。
有什么想法吗?谢谢。
【问题讨论】:
-
像往常一样。戳它,重新阅读文档并走上正轨。