Ani
Ani

Reputation: 159

Script stops after entering root mode in ubuntu

Script stops after entering root mode in ubuntu I was writing a script in python where I need to be a root user to install a few packages. Issuing "sudo -i" exits the script without proceeding further.Could not figure out the reason. I have posted a part of code where it happens.

def install_SOFTWARE():
  print" SOFTWARE DIRECTORY\n"+SOFTWARE_dir+"\n\n" #SOFTWARE_dir is global variable 
  subprocess.call(['sudo','-i'])                   #Code exits here          
  os.chdir(SOFTWARE_dir)
  subprocess.call(['sudo','make'])
  subprocess.call(['sudo','make','install'])

Upvotes: 0

Views: 140

Answers (1)

richizy
richizy

Reputation: 2122

man sudo says

  -i [command]
               The -i (simulate initial login) option runs the shell
               specified in the passwd(5) entry of the target user as a
               login shell.  This means that login-specific resource files
               such as .profile or .login will be read by the shell.  If a
               command is specified, it is passed to the shell for
               execution.  Otherwise, an interactive shell is executed.
               sudo attempts to change to that user's home directory
               before running the shell.  It also initializes the
               environment, leaving DISPLAY and TERM unchanged, setting
               HOME, MAIL, SHELL, USER, LOGNAME, and PATH, as well as the
               contents of /etc/environment on Linux and AIX systems.  All
               other environment variables are removed.

You'll need to pass a command to -i otherwise sudo will try to open an interactive shell. Try daisy chaining the commands:

In [7]: import subprocess

In [8]: subprocess.call(['sudo', '-i', 'echo "hi"'])
Password:
hi
Out[8]: 0

In [9]:

Upvotes: 1

Related Questions