Python用户创建脚本

Python用户创建脚本,python,Python,出于培训原因,我正在尝试编写一个python脚本来创建和设置用户帐户和密码: import subprocess from subprocess import Popen users = ["user1"] default_passwd = 'password' for user in users: p1 = subprocess.Popen(["useradd" ,user]) proc = Popen(['echo' ,default_passwd , '|' , 'p

出于培训原因,我正在尝试编写一个python脚本来创建和设置用户帐户和密码:

import subprocess
from subprocess import Popen

users = ["user1"]
default_passwd = 'password'

for user in users:
    p1 = subprocess.Popen(["useradd" ,user])
    proc = Popen(['echo' ,default_passwd ,  '|' , 'passwd', user, '--stdin'])
    proc.communicate()
创建用户时,passwd进程失败。
如果有任何帮助,我们将不胜感激。

您为什么不在命令
useradd
的同时传递密码呢? 这样它就可以创建一个具有密码的用户,而无需提示

import os
import crypt

password ="your-password" 
crypted_password = crypt.crypt(password,"22")
os.system("useradd -p "+ crypted_password +" student")

为什么不将密码与命令
useradd
一起传递? 这样它就可以创建一个具有密码的用户,而无需提示

import os
import crypt

password ="your-password" 
crypted_password = crypt.crypt(password,"22")
os.system("useradd -p "+ crypted_password +" student")

@纳伦的答案简洁易懂;但是为了回答您的
子流程
问题,应该是这样的

import subprocess

users = ["user1"]
default_passwd = 'password'

for user in users:
    p1 = subprocess.Popen(['useradd', user, '-p'])
    proc = subprocess.Popen(['echo', default_passwd], stdout=subprocess.PIPE)
    p1.communicate(proc.stdout)
    proc.communicate()
  • p1打开一个子shell,执行
    useradd user1
    命令并等待输入
  • proc然后执行echo default\u passwd,但不是将输出发送到sys.stdout,而是通过管道将其发送到subprocess.PIPE
  • p1上的通信将
    proc.stdout
    的输出发送到p1的
    stdin
    ,并等待其完成
  • 最后的命令等待
    proc
    进程完成并退出

    • @Naren的答案简洁易懂;但是为了回答您的
      子流程
      问题,应该是这样的

      import subprocess
      
      users = ["user1"]
      default_passwd = 'password'
      
      for user in users:
          p1 = subprocess.Popen(['useradd', user, '-p'])
          proc = subprocess.Popen(['echo', default_passwd], stdout=subprocess.PIPE)
          p1.communicate(proc.stdout)
          proc.communicate()
      
      • p1打开一个子shell,执行
        useradd user1
        命令并等待输入
      • proc然后执行echo default\u passwd,但不是将输出发送到sys.stdout,而是通过管道将其发送到subprocess.PIPE
      • p1上的通信将
        proc.stdout
        的输出发送到p1的
        stdin
        ,并等待其完成
      • 最后的命令等待
        proc
        进程完成并退出

      不要将壳管与子流程一起使用。相反,尝试使用
      subprocess.PIPE
      在进程之间进行通信。不要将shell管道与子进程一起使用。相反,尝试使用
      subprocess.PIPE
      在进程之间进行通信。
      os.system
      比subprocess modulence简单得多的很好的示例。
      os.system
      比subprocess moduleThanks Vinny简单得多。它可以工作,但似乎没有正确设置密码。我错过了
      -p
      参数;现在就试试吧谢谢你的评论。它可以工作,但似乎没有正确设置密码。我错过了
      -p
      参数;现在试试看