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

Перенаправление вывода результатов работы команды

Модуль sh может перенаправить STDOUT и STDERR процесса на множество различных типов целей, используя специальные ключевые аргументы _out и _err.

Если в качестве значения ключевых аргументов _out и _err используется строка, то предполагается, что это имя файла. Имя файла открывается как mode='wb', что означает создание файла в двоичном режиме.

import sh
sh.ifconfig(_out="/tmp/interfaces")

В качестве значений _out и _err можно также использовать любой объект, который поддерживает метод .write(data), например io.StringIO или файловый объект:

import sh
from io import StringIO

buf = StringIO()
sh.ifconfig(_out=buf)
print(buf.getvalue())

А как добавлять выходные данные в существующий файл?

Для этого необходимо использовать файловый объект, открытый в желаемом режиме, например mode='a':

import sh

fp = open("/tmp/output", "a")

sh.ls("/dir1", _out=fp)
sh.ls("/dir2", _out=fp)

Функция обратного вызова также может быть использована в качестве цели. Функция должна соответствовать одной из трех сигнатур:

  • fn(data): функция берет только часть данных из процесса.
  • fn(data, stdin_queue) в дополнение к предыдущей сигнатуре функция также принимает очередь queue.Queue, которая может использоваться для программного взаимодействия с процессом.
  • fn(data, stdin_queue, process) в дополнение к предыдущей сигнатуре функция принимает weakref.weakref
from sh import tail

# функция обратного вызова
def process_output(line):
    print(line)

p = tail("-f", "/var/log/some_log_file.log", _out=process_output, _bg=True)
p.wait()