Перенаправить вывод программы Python в /dev/null

Перенаправить вывод программы Python в /dev/null

У меня есть исполняемый файл Python, написанный и скомпилированный кем-то другим, который мне просто нужно запустить один раз на полпути к моему собственному скрипту bash. Программа использует текстовый пользовательский интерфейс, поэтому ждет ввода перед продолжением, но ключевые операции, которые она выполняет при запуске, требуются в моем скрипте bash. Грязная (и странная) процедура, я знаю, но, к сожалению, у меня нет других вариантов.

Я обошел принудительное закрытие программы с помощью сигнала kill, но TUI программы настаивает на выводе туда, где она запущена. Я пробовал перенаправить и stdout, и stderr в /dev/null и запустить программу в фоновом режиме, добавив амперсанд, но просто не могу заставить ее играть. Я полагаю, что причина в том, что программа порождает другие процессы, а перенаправление вывода родительского процесса на них не влияет. Есть ли какой-нибудь трюк, который я могу использовать, чтобы перенаправить весь вывод из дочерних процессов?

решение1

Программа может писать в tty вместо stdout. Вы можете использовать скрипт, unbuffer который идет сexpectили какая-то другая техника с использованием expectили что-то подобное.

Вот демонстрация. Создайте этот скрипт и назовите его "writetty". Затем выполните chmod u+x writetty:

#!/bin/bash
date > /dev/tty

А теперь попробуйте:

$ ./writetty
Tue Jun  8 12:24:36 CDT 2010
$ ./writetty > /dev/null
Tue Jun  8 12:24:46 CDT 2010
$ var=$(./writetty)
Tue Jun  8 12:24:56 CDT 2010
$ unbuffer ./writetty > /tmp/writetty.out
$ cat /tmp/writetty.out
Tue Jun  8 12:25:06 CDT 2010
$ var=$(unbuffer ./writetty)
$ echo $var
Tue Jun  8 12:25:16 CDT 2010

Вы можете использовать его expectдля ответа на запрос программы на ввод данных вместо ее завершения.

Связанный контент