如何存储所有命令输出和错误?

如何存储所有命令输出和错误?

你好呀!

我需要捕获所有命令、stdout 和 stderr,而无需对命令进行任何添加。
我的意思是,我必须保存/存储这些输出:

  1. $ echo'测试'
  2. $ ls -l
  3. $ cat 某个文件

命令文件

  1. alex@bender:/pwd$ echo‘测试’
  2. alex@bender:/pwd$ ls
  3. alex@bender:/pwd$ cat some_file
  4. alex@bender:/pwd$ fsdfsdfsd

标准输出文件

  1. 测试
  2. 测试.txt某些文件
  3. 一些文件内容

标准错误文件

_4. fsdfsdfsd

至于问题的第一部分,我找到了一个脚本,它使用了一个陷阱,在评估命令之前,它会将命令存储到日志中。但是存储输出呢?重复:这个问题应该可以在不添加任何命令的情况下解决。我的意思是,运行脚本后,我不需要编写,例如第一个命令 ls> 日志文件我想看到没有“>日志文件

我编写了一些 python 脚本,它的作用类似于命令包装器。

如果姓名== '主要的':
用户 = os.getlogin()
机器名 = 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()

但是在这个包装器中,我无法使用自动完成功能,就像在 bash 中一样,并且这个脚本无法存储我想要的所有内容。

也许,有人可以告诉我,我该怎么做?

答案1

也许该screen工具可以通过屏幕记录功能为您解决问题。只需screen在命令行中启动并使用按键CTRL-a + H(首先组合CTRL + a然后大写 H 与SHIFT + H,只是为了澄清)所有内容都会记录在文件中screenlog.0。日志文件所在的目录取决于您启动屏幕的位置,即如果您在 $HOME 中启动屏幕,那么日志文件将在那里找到。

答案2

这可以通过 python pty 模块完成: 使用伪终端记录终端会话的所有输入和输出

相关内容