user567879 user567879 - 1 month ago 11
Bash Question

How to store the result of an executed shell command in a variable in python?

I need to store the result of a shell command that I executed in a variable. But i couldn get that. I tried like:

call=os.system("cat syscall_list.txt | grep f89e7000 | awk '{print $2}'")
print call


But it prints the result in terminal and prints the value of call as zero, possibly indicating as success. How to get the result stored in a variable?

Answer

Use the subprocess module instead:

import subprocess
output = subprocess.check_output("cat syscall_list.txt | grep f89e7000 | awk '{print $2}'", shell=True)

Edit: this is new in Python 2.7. In earlier versions this should work (with the command rewritten as shown below):

import subprocess
output = subprocess.Popen(['awk', '/f89e7000/ {print $2}', 'syscall_list.txt'], stdout=subprocess.PIPE).communicate()[0]

As a side note, you can rewrite

cat syscall_list.txt | grep f89e7000

To

grep f89e7000 syscall_list.txt

And you can even replace the entire statement with a single awk script:

awk '/f89e7000/ {print $2}' syscall_list.txt

Leading to:

import subprocess
output = subprocess.check_output(['awk', '/f89e7000/ {print $2}', 'syscall_list.txt'])