Jak*_*ake 6 python subprocess user-management
我正在尝试自动设置SFTP访问.此脚本作为具有sudo权限且没有密码的用户运行.
我可以像这样创建一个用户:
>>> import subprocess
>>> process = subprocess.Popen(['sudo', 'useradd', 'test'], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
>>> process.communicate()
('', '')
Run Code Online (Sandbox Code Playgroud)
接下来我需要设置用户的密码,但我无法弄清楚如何.这是我尝试过的.
>>> process = subprocess.Popen(['sudo', 'chpasswd'], shell=False, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
>>> process.communicate('test:password')
Run Code Online (Sandbox Code Playgroud)
在我的python程序中它没有任何效果,在交互式解释器中它在第一行之后锁定.
最好的方法是什么?
我在Ubuntu lucid上运行python 2.6.
小智 7
尝试以下代码,这将按照您的要求自动执行
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
Run Code Online (Sandbox Code Playgroud)
print 语句是可选的.
如果您通过参数将数据发送到标准输入,communicate则说明您需要添加的文档:stdin=PIPEcommunicate
http://docs.python.org/release/2.6/library/subprocess.html#subprocess.Popen.communicate
我很欣赏这只是一个骷髅代码,但这里有另外两个小评论,如果它们有用:
useradd命令的输出不感兴趣,除了它是否失败,你可能最好使用subprocess.check_call,如果命令返回非零,将引发异常.process.returncode在打电话后检查是否为0communicate('test:password')| 归档时间: |
|
| 查看次数: |
13360 次 |
| 最近记录: |