0
Изнутри emperl, я пытаюсь вызвать wkhtmltopdf с модулем IPC :: Open3.embperl - Использование IPC :: Open3 для вызова wkhtmltopdf. STDIN Не работает
Я получаю выходные данные (спасибо ikegami) от wkhtmltopdf, но вход не будет в wkhtmltopdf.
Это связано с этим вопросом: perl/embperl — IPC::Open3
Вот код:
[-
use warnings;
use strict;
use IPC::Open3;
use POSIX;
use Symbol;
my $cmd = '/usr/local/bin/wkhtmltopdf - -';
my $pdf = '';
my $string = '<!DOCTYPE html>
<html>
<head>
<title>Hello World</title>
</head>
<body>
Hello World!!!
</body>
</html>';
my $fhOUT = gensym();
open($fhOUT, '>', '/dev/null') or die $!;
dup2(fileno($fhOUT), 1) or die $! if fileno($fhOUT) != 1;
local *STDOUT;
open(STDOUT, '>&=', 1) or die $!;
my $pid = open3(*HIS_IN, *HIS_OUT, *HIS_ERR, $cmd) or die "could not run cmd : $cmd : $!\n";
print HIS_IN $string;
close(HIS_IN);
while(<HIS_OUT>) {
$pdf .= $_;
}
waitpid($pid, 0) or die "$!\n";
my $retval = $?;
# print "retval-> $retval<br />\n";
$http_headers_out{'Content-Type'} = "application/pdf";
$http_headers_out{'Content-Disposition'} = "attachment; filename=pdfTest.pdf";
$escmode = 0;
-]
[+ $pdf +]
Hello ikegami. Спасибо, что нашли время ответить. Кажется, что это работает, но теперь в списке процессов появляется ** несуществующий процесс **. 'apache 24480 24396 0 14:34? 00:00:00 [wkhtmltopdf] ' –
Неиспользованный процесс - это тот, который не был использован (например, с помощью' wait' или 'waitpid'). – ikegami
Я добавил waitpid, и он работает, когда я добавляю 'open (my $ fhIN, '<', '/ dev/null') или die $ !; dup2 (fileno ($ fhIN), 0) или умереть $! если fileno ($ fhIN)! = 0; местный * STDIN; open (STDIN, '<& =', 0) или die $ !; 'После этого я не могу выводить ничего через html. Он пишет файл в порядке, поэтому я знаю, что он работает, но я не могу писать в браузер. –