ermek6
@ermek6
::Живу с удовольствием::

Как прочитать результат команды ОС в perl?

Ребят, подскажите пожалуйста, как обойтись без временного файла.
Код с использованием временного файла

#!/usr/bin/perl

$cmd = "/c/Program\\ Files/1cv8/8.3.17.2171/bin/rac process list --cluster-user=clusr --cluster-pwd=super --cluster=UUID > /e/1C/monitor/rac/process-list.txt";

my $counter = 0;

while(){
	last if($counter++>200);

	$result = system($cmd);

	open(PROCESSES, "/e/1C/monitor/rac/process-list.txt");

	my @strs = <PROCESSES>;
	close(PROCESSES);
#............
}


У меня, почему то когда делаешь open(PROCESS, "dir") то результат выводится в print, а команда выше нет.
Так же ведут себя и обратные ковычки. (dir выводит, $cmd из кода - нет)

что это
делаю свой монитор процессов для 1С, что бы точное время и порт процесса знать, для анализа тех. журнала 1С по конкретному экземпляру службы
  • Вопрос задан
  • 95 просмотров
Пригласить эксперта
Ответы на вопрос 1
shoorick
@shoorick
программист
Можно открыть результат работы команды функцией open и читать его как обычный текстовый файл — см. perldoc -f open
If MODE is "|-", then the filename is interpreted as a command to which output is to be piped, and if MODE is "-|", the filename is interpreted as a command that pipes output to us.


Пример, читающий список процессов, возвращаемых командой ps ax, и выводящий каждый из них задом наперёд :
#!/usr/bin/perl
# https://qna.habr.com/q/1166324

open(my $fh, '-|', 'ps ax')
     or die "Can't spawn ps: $!";

while (my $process = <$fh>) {
    print scalar reverse $process;
}

Работает под Debian GNU/Linux. Получится ли аналогичное под виндой (с использованием указанной вами утилиты rac вместо линуксовой команды ps) — не возьмусь предсказать. Попробуйте.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы