你好呀!
我需要捕获所有命令、stdout 和 stderr,而无需对命令进行任何添加。
我的意思是,我必须保存/存储这些输出:
- $ echo'测试'
- $ ls -l
- $ cat 某个文件
命令文件
- alex@bender:/pwd$ echo‘测试’
- alex@bender:/pwd$ ls
- alex@bender:/pwd$ cat some_file
- alex@bender:/pwd$ fsdfsdfsd
标准输出文件
- 测试
- 测试.txt某些文件
- 一些文件内容
标准错误文件
_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 模块完成: 使用伪终端记录终端会话的所有输入和输出。