Тема: hpt.core
Показать сообщение отдельно
  #6  
Старый 07.10.2022, 13:51
Pavel Gulchouck
Guest
 
Сообщений: n/a
По умолчанию hpt.core

Pavel Gulchouck написал(а) к Ruslan Suleimanov в Oct 22 12:19:52 по местному времени:

Нi Ruslan!

06 Oct 22, Ruslan Suleimanov ==> Pavel Gulchouck:

PG>> Покажи, как именно он запускается из перла.

RS> open(FROMK,"-|") || exec("cat /mnt/fido/CODE/db/1.txt | hpt -c /mnt/fido/zone2/husky/config post -af '2:467/888' -nf '.....' ... -")
RS> || die "error message: $!";
RS> close(FROMK);

Тут много странного.
У open() второй параметр "-|", что предполагает третий аргумент как процесс, для которого stdout перенаправляется в FROMK. Но третий параметр не передаётся, от undef. Вариант undef как третий параметр используется для unnamed tempfile, но это в случае "+>", а в твоём случае я не понимаю, что произойдёт и что имелось ввиду, поясни.

Кстати, для filehandle рекомендуют использовать обычные переменные, а не glob, т.е. "open(my $fromk, ...)" вместо устаревшего варианта "open(FROMK, ...)".

Потом, exec() выполняется только если этот open() не был успешен. Немного странная логика, ну да ладно.
Наверное, ты знаешь, что exec() заменяет текущий процесс запускаемым, т.е. возврата после успешного exec() не происходит (если нужен возврат и продолжение работы скрипта, то вместо exec() надо использовать system()).

Зачем вызывать в варианте "cat 1.txt | hpt post ... -" вместо "hpt post ... 1.txt"? Не исключаю, что hpt может плохо работать с пайпом на stdin - не ожидать, что данные ещё не готовы и их прочитано меньше, чем запрошено. Кроме того, передавать файл параметром эффективнее: в этом случае не нужно будет запускать дополнительный процесс cat и, скорее всего, shell.

hpt, конечно, всё равно не должен падать по segfault, но для начала имеет смысл привести к более понятному виду его запуск.

Lucky carrier,
Паша
aka gul@gul.kiev.ua
--- GoldED+/LNX 1.1.5-b20160827
Ответить с цитированием