简体   繁体   中英

From a python script, change user, set environment and run a couple of commands

I need to run a python script that changes user, sets a enviroment variable and executes a command and return the output.

1.) The way I am currently doing this is I am creating a shell script that does this for me:

tmpshell.sh

su - grid -c "echo +ASM1 | . oraenv; asmcmd volinfo -a"

The command fails because the environment is not being set.

2.) The second way I tried was by changing user is python script itself and then creating the shell script.

tmp.py

os.system('su - grid')
TMPFILE="/tmp/tmpfile.sh"
filehandle=open(TMPFILE,'w')
filehandle.write('+ASM1|. oraenv')
filehandle.write('asmcmd volinfo -a')
filehandle.close()
os.chmmod(TMPFILE,0755)

Here the problem is that the python script changes the user but the rest of the script doesn't run until I enter exit.

OUTPUT

[root@odadev1 oakvmclientlib]# python test.py
[grid@odadev1 ~]$ exit

[root@odadev1 oakvmclientlib]# 

Any suggestions/better ways to do this ??

ps(edit) ". oraenv" is for setting the environment and +ASM1 is the environment variable it expects.

Try something like this:

$ sudo -u grid sh -c ". oraenv; echo +ASM1|asmcmd volinfo -a"

This will launch a shell as user grid , set up the environment in it and execute the command. I'm not sure what the second part of your command does, though - I suspect you want to pipe +ASM1 into the standard input of asmcmd , but you haven't given enough context to be sure.

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM