Capturando toda a saída da entrada de tubulação em um programa cli

1

Quando faço algo como:

$ echo "print \"test\"" | python

Eu quero:

Python 2.7.15rc1 (default, Apr 15 2018, 21:51:34) 
[GCC 7.3.0] on linux2
Type "help", "copyright", "credits" or "license" for more 
information.
>>> print "test"
test

Em vez de:

test

Existe alguma maneira de capturar todos os prompts no stdout?

    
por skim99 21.08.2018 / 03:56

1 resposta

3

Você pode combinar todas as sugestões feitas nos comentários, com uma string aqui misturada em:

$ script -c 'python -i <<< "print \"test\""'
Script started, file is typescript
Python 2.7.5 (default, Jul 13 2018, 13:06:57)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> test
>>>
Script done, file is typescript

Qual será o log acima em um arquivo chamado, typescript :

$ cat typescript
Script started on Tue 21 Aug 2018 12:19:50 AM EDT
Python 2.7.5 (default, Jul 13 2018, 13:06:57)
[GCC 4.8.5 20150623 (Red Hat 4.8.5-28)] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> test
>>>

Script done on Tue 21 Aug 2018 12:19:50 AM EDT

O método acima funciona assim:

  • script -c '...' - runs the commands in single quotes in script and logs the output to the file typescript '
  • python -i <<< "...." - executa o Python no modo interativo, passando um comando, "...." como aqui string
  • "print \"test\"" - comando para executar como aqui string

datilografado com seqüências de escape

Se você achar que o arquivo typescript resultante contém seqüências de escape, como:

ESC[34mRPMsESC[39;49mESC[0m
ESC[34mRPMs_fpmESC[39;49mESC[0m
ESC[34mansibleESC[39;49mESC[0m

Você pode usar less -R ou less -r para visualizá-los:

$ less -R somefile
RPMs
RPMs_fpm
ansible

Referências

por 21.08.2018 / 06:24

Tags