Salsa
Salsa

Reputation: 957

How to create a user in linux using python

How do I create a user in Linux using Python? I mean, I know about the subprocess module and thought about calling 'adduser' and passing all the parameters at once, but the 'adduser' command asks some questions like password, full name, phone and stuff. How would I answer this questions using subprocess? I've seen module called pexpect in this question: Can I use Python as a Bash replacement?. Is there any other standard module?

Upvotes: 19

Views: 47141

Answers (6)

alper
alper

Reputation: 3410

This is a solution where shell is false.

#!/bin/env/python

import subprocess
import traceback
import sys


def user_add(username, user_dir=None):
    if user_dir:
        cmd = ["sudo", "useradd", "-d", user_dir, "-m", username]
    else:
        cmd = ["sudo", "useradd", username]

    p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    output, error = p.communicate()
    output = output.strip().decode("utf-8")
    error = error.decode("utf-8")
    if p.returncode != 0:
        print(f"E: {error}")
        raise
    return output


try:
    username = "user"
    output = user_add(username)
    print(F"Success. {username} is added")
except:
    traceback.print_exc()
    sys.exit(1)


Upvotes: 1

unutbu
unutbu

Reputation: 880299

On Ubuntu, you could use the python-libuser package

Upvotes: 7

mcolak
mcolak

Reputation: 637

def createUser(name,username,password):
    encPass = crypt.crypt(password,"22")   
    return  os.system("useradd -p "+encPass+ " -s "+ "/bin/bash "+ "-d "+ "/home/" + username+ " -m "+ " -c \""+ name+"\" " + username)

Upvotes: 2

Jonathan Rioux
Jonathan Rioux

Reputation: 1096

import os
import crypt

password ="p@ssw0rd" 
encPass = crypt.crypt(password,"22")
os.system("useradd -p "+encPass+" johnsmith")

Upvotes: 5

Pavel Strakhov
Pavel Strakhov

Reputation: 40512

Use useradd, it doesn't ask any questions but accepts many command line options.

Upvotes: 24

Not Available
Not Available

Reputation: 3355

You could just use the built-in binaries so just call useradd or something through the subprocess module, However I don't know if there's any other modules that hook into Linux to provide such functionality.

Upvotes: 3

Related Questions