Redirecionar a saída do programa Python para /dev/null

Redirecionar a saída do programa Python para /dev/null

Eu tenho um executável Python, escrito e compilado por outra pessoa, que simplesmente preciso executar uma vez na metade do meu próprio script bash. O programa usa uma interface de usuário baseada em texto e, portanto, aguarda a entrada antes de prosseguir, mas as principais operações que ele executa ao iniciar são obrigatórias em meu script bash. Um procedimento confuso (e estranho) eu conheço, mas infelizmente não tenho outras opções.

Consegui fechar o programa à força com um sinal de interrupção, mas a TUI do programa insiste em enviar para onde quer que seja executado. Tentei redirecionar stdout e stderr para /dev/null e executar o programa em segundo plano com o sufixo de um e comercial, mas simplesmente não consigo fazer com que ele jogue. Acredito que a causa é que o programa gera outros processos e o redirecionamento de saída do processo pai não os afeta. Existe algum truque que eu possa utilizar para redirecionar também todas as saídas dos processos filhos?

Responder1

O programa pode estar gravando no tty em vez do stdout. Você pode usar o unbuffer script que vem comexpectou alguma outra técnica usando expectou algo semelhante.

Aqui está uma demonstração. Crie este script e chame-o de "writetty". Então faça chmod u+x writetty:

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

Agora experimente:

$ ./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

Você poderia usar expectpara responder à solicitação de entrada do programa em vez de eliminá-lo.

informação relacionada