On Mon, 31 Oct 2016 09:12:57 +0100, Peter Otten wrote: > Wildman via Python-list wrote: > >> Python 2.7.9 on Linux >> >> Here is a bash command that I want to run from a python >> program: sudo grep "^user\:" /etc/shadow >> >> If I enter the command directly into a terminal it works >> perfectly. If I run it from a python program it returns an >> empty string. Below is the code I am using. Suggestions >> appreciated. >> >> cmdlist = ["sudo", "grep", '"^$USER\:"', "/etc/shadow"] >> p = subprocess.Popen(cmdlist, >> stdout=subprocess.PIPE, >> stderr=subprocess.PIPE) >> shadow, err = p.communicate() >> print shadow > > What happens if you hardcode $USER? Compare: > >>>> subprocess.Popen(["sudo", "echo", "$USER"], > stdout=subprocess.PIPE).communicate() > ('$USER\n', None) > > That should explain the empty result. Possible fix: > >>>> subprocess.Popen(["sudo", "echo", os.environ["USER"]], > stdout=subprocess.PIPE).communicate() > ('user\n', None) > > While a shell should work, too, > >>>> subprocess.Popen("sudo echo $USER", stdout=subprocess.PIPE, > shell=True).communicate() > ('petto\n', None) > > I'd prefer the os.environ lookup.
I have code using that approach but I am trying to save myself from having to parse the entire shadow file. Grep will do it for me if I can get code right. -- <Wildman> GNU/Linux user #557453 The cow died so I don't need your bull! -- https://mail.python.org/mailman/listinfo/python-list