Игорь Н.
19 сообщений
#13 лет назад
Возникла такая вот задача:
Нужно выполнить процесс (в моём случае "/sbin/iptables -L" ), и просмотреть данные которые он вернёт. Т.е. нужно перенаправить как-то устройство вывода этого процесса в какой-нибудь мой буфер.

Кто-нибудь сталкивался ?
Дорохов Андрей
19 сообщений
#13 лет назад
Можете перенаправить стандартный вывод в файл:
Цитата:
/sbin/iptables -L > /tmp/myfile

И затем уже с файла считывать информацию.
Игорь Н.
19 сообщений
#13 лет назад
Пробовал.
Не работает. Максимум создаётся пустой файл "myfile"...
Использовал функцию ExecuteProcess.
Владимир Ф.
1322 сообщения
#13 лет назад
Цитата ("xneo"):
xneo

Может он в STDERR сообщения пишет?
Дорохов Андрей
19 сообщений
#13 лет назад
Я подозреваю, что программа даже не вызывается.
Попробуйте создать файл /sbin/check.sh с содержимым:
#!/bin/bash
touch /tmp/test

Сделайте его исполняемым:
chmod a+x /sbin/check.sh

И проверьте, создастся ли файл "/tmp/test" после вызова с Вашей программы.
Возможно, не хватает прав на исполнение iptables?
Игорь Н.
19 сообщений
#13 лет назад
Если я перенаправлю свой STDOUT и STDERROR в файл а потом запущу дочерний процесс, он их унаследует или нет ?

Это мой первый демон под линукс, плаваю
Евгений О.
263 сообщения
#13 лет назад
Цитата ("xneo"):
...
Нужно выполнить процесс (в моём случае "/sbin/iptables -L" ), и просмотреть данные которые он вернёт. Т.е. нужно перенаправить как-то устройство вывода этого процесса в какой-нибудь мой буфер....


Вот пример кода на sh загружающего вывод iptables в переменную IPTABLES_OUT, тоже самое можно написать и на любом (наверное) языке реализованном под linux:

IPTABLES_OUT=`iptables -L`
echo $IPTABLES_OUT


В практической работе, не забудьте проверить код завершения команды `iptables ...` (переменная $?), не забывайте, что, обычно, у демонов переменная окружения PATH отличается от того, что Вы имеете в консольной сессии - возможно из-за этого в Вашем случае система просто "не дотягивается" до команды iptables и Вам надо писать что-то вроде /sbin/iptables -L.
Игорь Н.
19 сообщений
#13 лет назад
Вышло, большое спасибо за помощь.
Проблема была с правами.
Хотя выполнить получилось только через промежуточный скрипт, напрямую через
ExecuteProcess('/sbin/iptables', '> xxx', ); 

не работает. Файл создаётся но он пустой...