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

末鹿安然 提交于 2019-12-12 12:08:05

问题


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 always has 0 but the command is returning the pid i want. Any input would be great.


回答1:


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")



回答2:


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!



来源:https://stackoverflow.com/questions/5744980/taking-the-results-of-a-bash-command-and-using-it-in-python

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!