首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在linux中通过python脚本设置用户密码?

如何在linux中通过python脚本设置用户密码?
EN

Stack Overflow用户
提问于 2011-01-14 14:12:13
回答 5查看 14.7K关注 0票数 6

我正在尝试自动设置SFTP访问。此脚本以具有sudo权限但没有密码的用户身份运行。

我可以像这样创建一个用户:

代码语言:javascript
运行
复制
>>> import subprocess
>>> process = subprocess.Popen(['sudo', 'useradd', 'test'], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
>>> process.communicate()
('', '')

接下来,我需要设置用户的密码,但我不知道如何设置。这是我尝试过的方法。

代码语言:javascript
运行
复制
>>> process = subprocess.Popen(['sudo', 'chpasswd'], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
>>> process.communicate('test:password')

在我的python程序中,它没有任何作用,在交互式解释器中,它在第一行之后锁定。

做这件事最好的方法是什么?

我在Ubuntu lucid上运行python 2.6。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-01-14 14:32:39

communicate的文档指出,如果要通过communicate参数将数据发送到标准输入,则需要添加stdin=PIPE

http://docs.python.org/release/2.6/library/subprocess.html#subprocess.Popen.communicate

我很欣赏这只是一个框架代码,但这里还有一些其他的小注释,以防它们被使用:

  • 如果除了useradd命令是否失败之外,您对该命令的输出不感兴趣,您最好使用subprocess.check_call,如果命令返回非零值,则会引发异常。
  • 在第二种情况下,您应该在调用communicate('test:password')

之后检查process.returncode是否为0

票数 6
EN

Stack Overflow用户

发布于 2012-12-04 14:31:09

尝试下面的代码,它将执行您所需的自动化操作

代码语言:javascript
运行
复制
from subprocess import Popen, PIPE, check_call  
check_call(['useradd', 'test'])   
proc=Popen(['passwd', 'test'],stdin=PIPE,stdout=PIPE,stderr=PIPE)  
proc.stdin.write('password\n')  
proc.stdin.write('password')  
proc.stdin.flush()  
stdout,stderr = proc.communicate()  
print stdout  
print stderr

print语句是可选的。

票数 8
EN

Stack Overflow用户

发布于 2011-01-14 14:32:17

你忘了这一点:

代码语言:javascript
运行
复制
stdin=subprocess.PIPE

要将数据发送到流程,您需要一个stdin

所以完整的陈述是:

代码语言:javascript
运行
复制
process = subprocess.Popen(['sudo', 'chpasswd'], stdout=subprocess.PIPE, stdin=subprocess.PIPE, stderr=subprocess.PIPE)

然后给communicate('password')打电话。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4688441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档