开发者

Taking the results of a bash command and using it in python

I am trying to write a code in python that will take some information from top and put it into a file. I want to just write the name of the application and generate the file. The problem i am having is that i can't get the output of the pidof command so i can use it in python. My code looks like this :

import os

a = input('Name of the application')
val=os.system('pidof ' + str(a)) 
os.system('top -d 30 | grep' + str(val) + '> test.txt')
os.system('awk '{print $10, $11}' test.txt > test2.txt')

The problem is that val alw开发者_如何转开发ays has 0 but the command is returning the pid i want. Any input would be great.


First up, the use of input() is discouraged as it expects the user to type in valid Python expressions. Use raw_input() instead:

app = raw_input('Name of the application: ')

Next up, the return value from system('pidof') isn't the PID, it's the exit code from the pidof command, i.e. zero on success, non-zero on failure. You want to capture the output of pidof.

import subprocess

# Python 2.7 only
pid = int(subprocess.check_output(['pidof', app]))

# Python 2.4+
pid = int(subprocess.Popen(['pidof', app], stdout=subprocess.PIPE).communicate()[0])

# Older (deprecated)
pid = int(os.popen('pidof ' + app).read())

The next line is missing a space after the grep and would have resulted in a command like grep1234. Using the string formatting operator % will make this a little easier to spot:

os.system('top -d 30 | grep %d > test.txt' % (pid))

The third line is badly quoted and should have caused a syntax error. Watch out for the single quotes inside of single quotes.

os.system("awk '{print $10, $11}' test.txt > test2.txt")


Instead of os.system, I recommend you to use the subprocess module: http://docs.python.org/library/subprocess.html#module-subprocess

With that module, you can communicate (input and output) with a shell. The documentation explains the details of how to use it.

Hope this helps!

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜