Как сохранить все выходные данные команд и ошибки?
Всем привет!
Мне нужно захватить все команды, stdout и stderr без каких-либо дополнений к командам.
Я имею в виду, что я должен сохранить / сохранить вывод этих:
- $ echo 'test'
- $ ls -l
- $ cat some_file
commands.file
- alex @ bender: / pwd $ echo 'test'
- alex @ bender: / pwd $ ls
- alex @ bender: / pwd $ cat some_file
- alex @ bender: / pwd $ fsdfsdfsd
stdout.file
- тестовое задание
- test.txt some_file
- некоторый контент файла
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 ответа
Это можно сделать с помощью pty-модуля python: использование псевдотерминала для записи всех входных и выходных данных терминальной сессии.
Может быть screen
инструмент может сделать трюк для вас с функцией регистрации экрана. Просто начни screen
в командной строке и с ключами CTRL-a + H
(Первая комбинация CTRL + a
а затем заглавная H с SHIFT + H
, только чтобы уточнить) все будет зарегистрировано в файле screenlog.0
, Каталог, в котором находится файл журнала, зависит от того, с какого экрана вы начали, т. Е. Если вы запустили экран в вашем $HOME, тогда файл журнала будет найден там.