Тема: hpt.core
Показать сообщение отдельно
  #9  
Старый 08.10.2022, 01:14
Ruslan Suleimanov
Guest
 
Сообщений: n/a
По умолчанию hpt.core

Ruslan Suleimanov написал(а) к Pavel Gulchouck в Oct 22 23:28:14 по местному времени:

Привет, Pavel!



Ответ на сообщение Pavel Gulchouck (2:463/68) к Ruslan Suleimanov, написанное 07 окт 22 в 12:19:



PG> Нi Ruslan!

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

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

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

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


тут я открываю канал без опаски перехвата интерпретатором команд моих аргументов
которые могут изменятся.
тоесть потом просто читается из FROMK в родительском процессе.


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

ок, спасибо, перепишу скрипт.

PG> Потом, exec() выполняется только если этот open() не был успешен. Немного
PG> странная логика, ну да ладно. Наверное, ты знаешь, что exec() заменяет
PG> текущий процесс запускаемым, т.е. возврата после успешного exec() не
PG> происходит (если нужен возврат и продолжение работы скрипта, то вместо
PG> exec() надо использовать system()).
PG> Зачем вызывать в варианте "cat 1.txt | hpt post ... -" вместо "hpt
PG> post ...
PG> 1.txt"?

а как можно безопасно вызвать чтобы динамичные аргументы не подставлялись в командах ?
через system() ?

PG> Не исключаю, что hpt может плохо работать с пайпом на stdin - не
PG> ожидать, что данные ещё не готовы и их прочитано меньше, чем
PG> запрошено.
PG> Кроме того, передавать файл параметром эффективнее: в этом случае не
PG> нужно
PG> будет запускать дополнительный процесс cat и, скорее всего, shell.
PG> hpt, конечно, всё равно не должен падать по segfault, но для начала
PG> имеет
PG> смысл привести к более понятному виду его запуск.

ок понял, попробую через system() и профильтровать динамические аргументы,
послежу за поведением, спасибо.




WBR Ruslan Suleimanov


"Спершу ти називаэш українцiв салоїдами, а потiм тебе в полi доїдає українська
свиня. В карми все ок з iронiєю."(c) Селфiя Iгорiвна

... Наши мысли, определяют наше будущее.
--- rsync://ip.fido.odessa.ua/FIDO/
Ответить с цитированием