Расшифровка стенограммы получения программы с перенаправленным вводом и выводом


renice[115625] - это утилита, позволяющая изменять добротность и увеличивать или уменьшать приоритет, но для того, чтобы сделать что-то более агрессивным, нужен корень.

Start [115626]block-paste[115627]:


Терминал

Если вы находитесь на терминале, вы можете использовать

renice

Простой пример -

Можно также передать жесткие флаги, но из этого следует, что порядок

Приоритеты работают по шкале от [115630]-20[115631] до [115632]20[115633] - чем меньше число, тем выше его приоритет в системе.

Конец блок-пасты.[115245].

2
16.04.2014, 08:25
2 ответа

Для того, чтобы печатать ввод после соответствующего приглашения, вам нужно знать, когда программа ожидает ввода. Это невозможно определить, наблюдая за запущенной программой: вы не можете отличить программу, ожидающую ввода на stdin, от программы, ожидающей чего-то еще (сеть, диск, вычисления, ...).

Поэтому процесс получения расшифровки, которая будет выглядеть как интерактивное использование, должен выглядеть так:

  • Запустите программу.
  • Дождаться - и распознать - первое приглашение.
  • Отобразить и отправить ввод на первый запрос.
  • То же самое со вторым запросом на ввод и всеми последующими.
  • Выйти из программы, когда программа завершается.

Де-факто стандартным инструментом для написания сценария является Expect. Сценарий будет выглядеть примерно так (предупреждение: это не рабочий код, набранный прямо в браузере):

#!/usr/bin/expect -f
set transcript_file [open "transcript" wb]
spawn myprogram
expect "Enter command:"
puts -nonewline $transcript_file $expect_out(buffer)
send "a_command\r"
puts -nonewline $transcript_file "a_command\r"
puts -nonewline $transcript_file $expect_out(buffer)
send "another_command\r"
puts -nonewline $transcript_file "another_command\r"
puts -nonewline $transcript_file $expect_out(buffer)
…
expect eof
close $transcript_file
0
27.01.2020, 23:01

Добавьте строку set -x в свой программный файл.

Пример:

#!/bin/bash
set -x #echo on

ls $PWD

Это раскрывает все переменные и печатает полные команды перед выводом команды.

вывод:

+ ls /home/user/
file1.txt file2.txt

Проверьте этот ответ из Stackoverflow, чтобы найти более похожие флаги для команды set.

0
27.01.2020, 23:01

Теги

Похожие вопросы