Вывод на консоль после запуска команды 'launchctl ...' из Pycharm. Для Python 3,7 - PullRequest
0 голосов
/ 25 мая 2020

Я запускаю команду:

'launchctl list | grep -v com.apple'

и мою задачу проверить, запущен ли определенный процесс.

Теперь я могу выполнить его только следующим образом: команда -> сохранить ответ в file.txt -> проверьте, есть ли этот процесс в этом тексте.

Но я хочу его оптимизировать.

Должно быть так:

if(statement that my process is up):
    do something
else:
    do something else

Подскажите, пожалуйста, есть ли другой (более простой) способ проверить?

1 Ответ

1 голос
/ 25 мая 2020

Вы можете использовать модуль subprocess для вызова команды из вашего Python скрипта и захвата ее вывода:

import subprocess

stdout = subprocess.check_output(['launchctl', 'list'], universal_newlines=True)
if 'yourapp' in [line.strip() for line in stdout.splitlines() if 'com.apple' not in line]:
    do something
else:
    do something else

Здесь следует отметить:

  • Нет необходимости передавать grep по конвейеру, потому что мы можем выполнять обработку в Python.
  • Нам также не нужно вызывать оболочку, и мы можем запустить launchctl напрямую, передав список аргументов , а не одной строкой. В этом примере это не имеет большого значения, но как только вы захотите добавить параметры, которые могут содержать специальные символы, лучше избегать прохождения через оболочку.
  • check_output вызывает исключение, если программа терпит неудачу с ненулевым кодом выхода.
  • universal_newlines=True декодирует вывод (обычно это bytes) в строку. Аргумент с более разумным названием text был добавлен в Python 3.7, поэтому вы можете использовать его, если вам не нужна совместимость со старыми Pythons.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...