Como guardo todas as saídas e erros dos comandos?

3

Olá!

Eu preciso capturar todos os comandos, stdout e stderr sem qualquer adição aos comandos.
Quer dizer, eu tenho que salvar / armazenar a saída destes:

  1. $ echo 'test'
  2. $ ls -l
  3. $ cat some_file

commands.file

  1. alex@bender:/pwd$ echo 'test'
  2. alex@bender:/pwd$ ls
  3. alex@bender:/pwd$ cat some_file
  4. alex@bender:/pwd$ fsdfsdfsd

stdout.file

  1. test
  2. test.txt some_file
  3. some file content

stderr.file

_4. fsdfsdfsd

Quanto à primeira parte da questão, encontrei o script, que usa uma armadilha e antes de avaliar o comando que armazena o comando para registrar. Mas e quanto ao armazenamento de saída? repita: isso deve ser resolvido sem quaisquer adições ao comando. Quero dizer, depois de executar o script, eu não preciso escrever, por exemplo, primeiro comando ls > log.file Eu quero ver sem " > log.file "

Eu escrevo algum script python, ele funciona como um wrapper de comando.

if name == 'main':
user = os.getlogin()
machine_name = os.uname()[1]

stdinbuff = open('commands', 'w')                                             
stdoutbuff = open('outs', 'w')                                                

command_string = 1                                                            
while command_string != '0':                                                  

    a = user + '@' + machine_name + ":" + os.getcwd() + '>';                  
    a = a.replace('/home/', '~/')                                             
    print a,                                                                  
    command_string = raw_input()                                              
    command_args = command_string.split()                                     

    proc = subprocess.Popen(command_args, stdout=subprocess.PIPE)             
    (out, err) = proc.communicate()                                           
    print out                                                                 

    stdinbuff.write(command_string+'\n')                                      
    stdoutbuff.write(out+'\n')                                                

stdinbuff.close()                                                                 
stdoutbuff.close()

mas neste wrapper, não consigo usar o preenchimento automático, como no bash, e esse script não pode armazenar tudo o que eu quero.

Talvez alguém possa me dizer o que devo fazer?

    
por Alex Bender 13.10.2013 / 11:53

2 respostas

1

Isso pode ser feito com o módulo python pty: usando um pseudo-terminal para registrar todas as entradas e saídas de uma sessão de terminal .

    
por 05.06.2015 / 16:01
1

Talvez a ferramenta screen possa fazer o truque para você com a função de registro de tela. Simplesmente inicie screen na linha de comando e com as chaves CTRL-a + H (primeira Combinação de CTRL + a e então uma letra maiúscula H com SHIFT + H , apenas para esclarecer) tudo será registrado no arquivo screenlog.0 . O diretório onde o logfile é encontrado depende de onde você iniciou a tela, i. e. Se você iniciou a tela em seu $ HOME, então o arquivo de log será encontrado lá.

    
por 13.10.2013 / 12:11