2017-09-28 247 views
1

培訓的原因我試着去編寫創建和設置用戶帳戶和密碼的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 , '|' , 'passwd', user, '--stdin']) 
    proc.communicate() 

雖然創建的用戶,在passwd進程失敗。 任何幫助,將不勝感激。

+0

不要將子管道與子進程一起使用。相反,嘗試使用'subprocess.PIPE'進行進程之間的通信。 – Evert

回答

1

@Naren答案很整潔,可讀性更強;但在回答你subprocess問題的目的,應該是這樣的

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打開與useradd user1命令子Shell中執行,等待輸入
  • PROC然後執行echo default_passwd,但不是將輸出發送到sys.stdout的,它管它subprocess.PIPE
  • P1上進行通信的proc.stdout的輸出發送到p1和等待的stdin它完成
  • 拉斯維加斯t命令等待proc進程結束並退出
+0

感謝Vinny的評論。它的工作原理,但似乎沒有設置密碼正確。 – VorX

+0

我錯過了'-p'參數;現在就試試 – Vinny

3

爲什麼不通過密碼連同命令useradd? ,這樣它就創建了一個不帶提示的密碼的用戶!

import os 
import crypt 

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

不錯的例子,其中'os.system'比子流程模塊簡單得多 – Vinny