Search code examples
pythonsubprocesssudospawnpexpect

sudo pass automatic password in Python


I want to call a .sh file from a python script. This requires sudo permissions and I want to automatically pass the password without getting a prompt. I tried using subprocess.

(VAR1 is variable I want to pass, permissions.sh is the sh file I want to call from python script)

process = subprocess.Popen(['sudo', './permissions.sh', VAR1], stdin = subprocess.PIPE, stdout = subprocess.PIPE)
process.communicate(password)

Then I tried using pexpect

child = pexpect.spawn('sudo ./permissions.sh'+VAR1)
child.sendline(password)

In both cases it still prompts for password on the terminal. I want to pass the password automatically. I do not want to use os modules. How can this be done?


Solution

  • would use pexpect, but you need to tell it what to expect after the sudo as so:

    #import the pexpect module
    import pexpect
    # here you issue the command with "sudo"
    child = pexpect.spawn('sudo /usr/sbin/lsof')
    # it will prompt something like: "[sudo] password for < generic_user >:"
    # you "expect" to receive a string containing keyword "password"
    child.expect('password')
    # if it's found, send the password
    child.sendline('S3crEt.P4Ss')
    # read the output
    print(child.read())
    # the end