brcebn
brcebn

Reputation: 1732

Handle result of os.system

I'm using python to script a functional script and I can't handler the result of this command line:

os.system("ps aux -u %s | grep %s | grep -v 'grep' | awk '{print $2}'" % (username, process_name)

It shows me pids but I can't use it as List.

If I test:

pids = os.system("ps aux -u %s | grep %s | grep -v 'grep' | awk '{print $2}'" % (username, process_name)
print type(pids)

#Results
29719
30205
31037
31612
<type 'int'>

Why is pids an int? How can I handle this result as List?

Stranger part:

print type(os.system("ps aux -u %s | grep %s | grep -v 'grep' | awk '{print $2}'" % (username, process_name))

There is nothing. Not any type written on my console..

Upvotes: 3

Views: 5790

Answers (2)

valhallasw
valhallasw

Reputation: 341

os module documentation

os.system(command)

Execute the command (a string) in a subshell. This is implemented by calling the Standard C function system(), and has the same limitations. Changes to sys.stdin, etc. are not reflected in the environment of the executed command.

On Unix, the return value is the exit status of the process encoded in the format specified for wait(). Note that POSIX does not specify the meaning of the return value of the C system() function, so the return value of the Python function is system-dependent.

If you want access to the output of the command, use the subprocess module instead, e.g. check_output:

subprocess.check_output(args, *, stdin=None, stderr=None, shell=False, universal_newlines=False)

Run command with arguments and return its output as a byte string.

Upvotes: 0

Thomas Orozco
Thomas Orozco

Reputation: 55303

os.system does not capture the output of the command it runs. To do so you need to use subprocess.

from subprocess import check_output

out = check_output("your command goes here", shell=true)

The above will work in Python 2.7. For older Pythons, use:

import subprocess
p = subprocess.Popen("your command goes here", stdout=subprocess.PIPE, shell=True)
out, err = p.communicate()

Upvotes: 7

Related Questions