Как перехватить вывод, который не поступает ни в стандартный вывод, ни в стандартный вывод?

411 — это ошибка клиента «Требуется длина». Это означает, что запрос не содержит этого поля. Нужно правильно задать запрос. Предполагая, что вы используете SoapUI в качестве клиента (приложения, которое вызывает сервер ), вам необходимо установить там заголовки запроса .

Обратитесь к этому, например:https://www.soapui.org/docs/functional-testing/teststep-reference/http-request/headers.html

0
04.09.2021, 17:59
1 ответ

Зависит от того, что делает программа. Помимо стандартного вывода (fd 1 )и ошибки (fd 2 ), часто также открывается стандартный ввод(fd 0 )для чтения -для записи, когда программа запускался с терминала без перенаправления, и его можно было использовать для записи вывода. Другой вариант — явно открыть /dev/tty, что дает новый fd, подключенный к управляющему терминалу процесса.

modulecmdпо какой-то причине использует стандартный ввод. Запустив straceна нем, мы увидим, что он записывает строку заголовка в исходный fd 2, затем (после некоторого несвязанного жонглирования fd, которое не касается fd 0 )дублирует fd 0 (stdin )в fd 2 и печатает там описание.

...
write(2, "\n----------- Module Specific Hel"..., 70) = 70
...
[unrelated shuffling of other fds]
...
dup(0)                                  = 2
write(2, "\tThis module does absolutely not"..., 37) = 37
write(2, "\r\n", 2)                     = 2
write(2, "\tIt's meant simply as a place ho"..., 44) = 44
...

Таким образом, вы можете перенаправить эту часть сообщения, перенаправив stdin (fd 0 )в какой-либо файл, например.0>somefile(или /dev/null, чтобы подавить его ), в дополнение к любым перенаправлениям stdout и stderr.

Перенаправление наподобие < /dev/ttyтакже может препятствовать выводу, давая процессу явный -только для чтения fd. (Однако программа получит ошибку при вызове write(). )В Linux вы даже можете выполнить < /dev/stdinс тем же результатом, если исходный стандартный ввод подключен к терминалу.

Если какая-то программа использовала /dev/tty, получение выходных данных затруднено. Если возможно, что-то вродеsetsidможет быть использовано для запуска программы без управляющего терминала, что будет означать, что открытие /dev/ttyне удастся. (Во всяком случае, это то, что он делает в Linux.)

1
04.09.2021, 19:59

Теги

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