Прежде всего, использование 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")