Сообщить об ошибке.

Объект запущенной команды модуля sh в Python

Класс RunningCommand модуля sh

Синтаксис:

import sh

RunningCommand = sh.ls('-l')

Возвращаемое значение:

Описание:

Объект RunningCommand представляет собой экземпляр команды, который был запущена или выполняется. Он существует как обертка вокруг низкоуровневого OProc. Большая часть вашего взаимодействия с объектами модуля sh происходит с экземплярами этого класса.

Предупреждение. Объекты этого класса ведут себя очень похоже на строки. Это было преднамеренное проектное решение, чтобы сделать “вывод” выполняемой команды более интуитивно понятным.

Имейте в виду, что функции Python, принимающие только реальные строки, например json.dumps, не будут работать с экземплярами RunningCommand, даже если они выглядят как строка.

Атрибуты и методы объекта RunningCommand.


RunningCommand.wait(timeout=None):

Метод RunningCommand.wait() блокирует дальнейшее выполнение программы до завершения выполнения команды терминала и получения кода выхода. Если код выхода представляет собой сбой, мы вызываем соответствующее исключение. См. Исключения.

Аргумент timeout - необязательное неотрицательное число для ожидания завершения команды. Если по истечении тайм-аута команда не завершается, то вызывается исключение sh.TimeoutException.

Примечание. Многократный вызов этого метода вызывает исключение только при первом вызове.

модулем sh вызывает метод автоматически, если только команда не выполняется асинхронно. В противном случае (фоновое выполнение команды) необходимо вызвать этот метод вручную, чтобы обеспечить завершение команды.

Если экземпляр Command используется в качестве аргумента stdin (смотрите Конвейеры), для этого экземпляра также вызывается метод .wait(), и любые исключения, возникающие в результате этого процесса, распространяются вверх.

RunningCommand.process:

Атрибут RunningCommand.process - базовый экземпляр низкоуровнего API OProc.

RunningCommand.stdout:

Атрибут RunningCommand.stdout - свойство @property, которое вызывает метод .wait(), а затем возвращает содержимое того, что процесс записал в stdout.

RunningCommand.stderr:

Атрибут RunningCommand.stderr - свойство @property, которое вызывает метод .wait(), а затем возвращает содержимое того, что процесс записал в stderr.

RunningCommand.exit_code:

Атрибут RunningCommand.exit_code - свойство @property, которое вызывает метод .wait(), а затем возвращает код выхода процесса.

RunningCommand.pid:

Атрибут RunningCommand.pid - идентификатор процесса.

RunningCommand.sid:

Атрибут RunningCommand.sid - идентификатор сеанса процесса. Обычно это будет другой сеанс, чем текущий процесс python, если не было указано _new_session=False.

RunningCommand.pgid:

Атрибут RunningCommand.pgid - идентификатор группы процессов.

RunningCommand.ctty:

Атрибут RunningCommand.ctty - управляющее оконечное устройство, если таковое имеется..

RunningCommand.signal(sig_num):

Метод RunningCommand.signal() отправляет sig_num процессу.

Обычно используется со значением из модуля signal, например sig_num=signal.SIGHUP.

RunningCommand.signal_group(sig_num):

Метод RunningCommand.signal_group() отправляет sig_num каждому процессу в группе процессов.

Обычно используется со значением из модуля signal, например sig_num=signal.SIGHUP.

RunningCommand.terminate():

Метод RunningCommand.terminate() ссылка на вызов RunningCommand.signal(signal.SIGTERM).

RunningCommand.kill():

Метод RunningCommand.kill() ссылка на вызов RunningCommand.signal(signal.SIGKILL).

RunningCommand.kill_group():

Метод RunningCommand.kill_group() ссылка на вызов RunningCommand.signal_group(signal.SIGKILL).

RunningCommand.is_alive():

Метод RunningCommand.is_alive() возвращает True, если процесс все еще жив, если нет, то False.

Пример использования объекта запущенной программы.

import sh

try:
    # запуск команды в блокирующем режиме
    sh.sleep(10, _timeout=1)
except sh.TimeoutException:
    print("we timed out, as expected")

Также исключение возникает при указании таймаута для RunningCommand.wait(timeout=None):

import sh

# запуск команды в фоновом режиме
p = sh.sleep(10, _bg=True)
try:
    p.wait(timeout=1)
except sh.TimeoutException:
    print("время ожидания кончилось")
    # убиваем фоновый процесс
    p.kill()