Взять результаты команды bash и использовать ее в python - PullRequest
4 голосов
/ 21 апреля 2011

Я пытаюсь написать код на python, который возьмет некоторую информацию сверху и поместит ее в файл.Я хочу просто написать название приложения и сгенерировать файл.У меня проблема в том, что я не могу получить выходные данные команды pidof, поэтому я могу использовать ее в python.Мой код выглядит так:

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

Проблема в том, что val всегда имеет 0, но команда возвращает pid, который я хочу.Любой вклад был бы великолепен.

Ответы [ 2 ]

8 голосов
/ 21 апреля 2011

Прежде всего, использование input() не рекомендуется, так как ожидает, что пользователь введет допустимые выражения Python. Используйте raw_input() вместо:

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

Далее, возвращаемое значение из system('pidof') - это не PID, это код выхода из команды pidof, т. Е. Ноль при успехе, ненулевой при ошибке. Вы хотите захватить вывод из 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())

В следующей строке пропущен пробел после grep, что привело бы к такой команде, как grep1234. Использование оператора форматирования строки % сделает это немного легче для определения:

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

Третья строка неверно процитирована и должна была вызвать синтаксическую ошибку. Остерегайтесь одинарных кавычек внутри одинарных кавычек.

os.system("awk '{print $10, $11}' test.txt > test2.txt")
2 голосов
/ 21 апреля 2011

Вместо os.system я рекомендую использовать модуль подпроцесса: http://docs.python.org/library/subprocess.html#module-subprocess

С этим модулем вы можете общаться (вход и выход) с оболочкой. Документация объясняет детали того, как его использовать.

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...