Вызов утилиты командной строки из Python - PullRequest
0 голосов
/ 31 декабря 2018

В настоящее время я пытаюсь использовать strace для автоматического отслеживания системных вызовов программы.Чтобы затем проанализировать и обработать полученные данные, я хочу использовать скрипт Python.

Теперь я задаюсь вопросом, как мне поступить с вызовом strace из Python?Strace обычно вызывается из командной строки, и я не знаю ни одной библиотеки C, скомпилированной из strace, которую я мог бы использовать.

Каков общий способ имитации доступа через командную строку через Python?в качестве альтернативы: есть ли инструменты, подобные strace, написанные изначально на Python?

Я благодарен за любую помощь.

Ничего, поскольку я не знаю

Ответы [ 3 ]

0 голосов
/ 31 декабря 2018

Вам необходимо использовать модуль subprocess.

У него есть check_output для чтения вывода и помещения его в переменную и check_call для проверки кода выхода.

Если вы хотите запустить скрипт оболочки, вы можете записать все это в строку и установить shell=True, в противном случае просто поместите параметры в виде строк в списке.

import subprocess
# Single process
subprocess.check_output(['fortune', '-m', 'ciao'])
# Run it in a shell
subprocess.check_output('fortune | grep a', shell=True)

Помните, что если вы запускаете вещив оболочке, если вы не выполняете свои действия правильно и не допускаете попадания пользовательских данных в вашу строку, легко сделать дыры в безопасности.Лучше не использовать shell=True.

0 голосов
/ 31 декабря 2018

Python 2 и Python 3 (ранее 3.5)

Просто выполните:

subprocess.call(["strace", "command"])

Выполните и верните выходные данные для обработки:

output = subprocess.check_output(["strace", "command"])

Ссылка: https://docs.python.org/2/library/subprocess.html

Python 3.5 +

output = subprocess.run(["strace", "command"], caputure_output=True)

Ссылка: https://docs.python.org/3.7/library/subprocess.html#subprocess.run

0 голосов
/ 31 декабря 2018

Вы можете использовать команды следующим образом:

import commands
cmd = "strace command"
result = commands.getstatusoutput(cmd)
if result[0] == 0:
   print result[1]
else:
   print "Something went wrong executing your command"

result[0] содержит код возврата, а result[1] содержит вывод.

...