3

Всем привет!

Мне нужно захватить все команды, stdout и stderr без каких-либо дополнений к командам.
Я имею в виду, что я должен сохранить / сохранить вывод этих:

  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. тестовое задание
  2. test.txt some_file
  3. некоторый контент файла

stderr.file

_4. fsdfsdfsd

Что касается первой части вопроса, я нашел скрипт, который использует ловушку и перед оценкой команды сохраняет команду для регистрации. Но как насчет хранения результатов? повторяю: это должно быть решено без каких-либо дополнений к команде. Я имею в виду, что после запуска скрипта мне не нужно писать, например, первую команду ls > log.file. Я хочу увидеть ее без " > log.file ".

Я пишу некоторый скрипт на Python, он работает как командная оболочка.

если 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()

но в этой оболочке я не могу использовать автозаполнение, как в bash, и этот скрипт не может хранить все, что я хочу.

Может быть, кто-то может сказать мне, что я должен делать?

2 ответа2

1

Может быть, screen инструмент может помочь вам с функцией регистрации экрана. Просто запустите screen в командной строке и с помощью клавиш CTRL-a + H (сначала комбинация CTRL + a а затем заглавная H с SHIFT + H , просто для пояснения) все будет зарегистрировано в файле screenlog.0 . Каталог, в котором находится файл журнала, зависит от того, с какого экрана вы начали, то есть, если вы запустили экран в вашем $ HOME, тогда файл журнала будет найден там.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .