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

19 повідомлень
#13 років тому
Можете перенаправить стандартный вывод в файл:Цитата:
/sbin/iptables -L > /tmp/myfile
И затем уже с файла считывать информацию.
19 повідомлень
#13 років тому
Пробовал.Не работает. Максимум создаётся пустой файл "myfile"...
Использовал функцию ExecuteProcess.
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.