LINUX.ORG.RU

Perl, open3 не работает STDOUT

 , , ,


0

1

В прошлой теме я пытался запускать open3:

$pid = open3($wtr, $rdr, $err, 'openssl', 'enc', '-aes-256-cbc', '-pass', "pass:$key", '-salt', '-base64');

Сейчас я тестирую этот код на RHEL 6.4 x86_64. Есть два интерпретатора:

  • Системный:
    This is perl, v5.10.1 (*) built for x86_64-linux-thread-multi
  • И свой, непонятно кем как и когда собранный (в комплекте куча модулей со CPAN):
    This is perl 5, version 16, subversion 3 (v5.16.3) built for x86_64-linux-thread-multi

Проблема в том, что на системном перле вызов open3 отрабатывает нормально. А на 5.16.3 STDERR и STDOUT пустые. В обеих случаях процесс openssl нормально запускается (его видно в ps).

В чём может быть проблема?

★★★★★

Последнее исправление: KennyMinigun (всего исправлений: 1)

Запускаю таким же образом скрипт вида:

#!/bin/bash

LOG="${0}.log"

read input
echo "## INPUT: $input" >> "$LOG"
echo "## test: working"

При запуске в лог пишется всё, что пришло на STDIN:

## INPUT: working

То есть STDIN нормально работает. Однако в перле с STDOUT дочернего процесса вновь пустая строка.

// надо бы проверить STDERR

KennyMinigun ★★★★★
() автор топика
Ответ на: комментарий от KennyMinigun

Хм, проверил stderr:

LOG="${0}.log"

read input
echo "## INPUT: $input" >> "$LOG"
echo "## test(stdout): working"
echo "## test(stderr): working" >&2

На STDERR в перле появилось:

/var/tmp/test/tester.sh: line 9: echo: write error: Bad file descriptor
## test(stderr): working

KennyMinigun ★★★★★
() автор топика
Ответ на: комментарий от KennyMinigun

Eureka!

Если коротко, надо так запускать:

$err = gensym; # раньше было $err = 1

$pid = open3($wtr, $rdr, $err, 'openssl', 'enc', '-aes-256-cbc', '-pass', "pass:$key", '-salt', '-base64');

KennyMinigun ★★★★★
() автор топика
Последнее исправление: KennyMinigun (всего исправлений: 1)
Ответ на: Eureka! от KennyMinigun

Не за что.

das_tier ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.