0
從embperl中,我試圖用IPC :: Open3模塊調用wkhtmltopdf。embperl - 使用IPC :: Open3調用wkhtmltopdf。 STDIN不起作用
我從wkhtmltopdf獲得輸出(感謝ikegami),但沒有任何輸入將轉到wkhtmltopdf。
這涉及到這樣一個問題:perl/embperl — IPC::Open3
下面是代碼:對於STDIN
[-
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 +]
ikegami你好。感謝您花時間回答。它似乎工作,但現在有一個**不存在的進程**顯示在進程列表中。 'apache 24480 24396 0 14:34? 00:00:00 [wkhtmltopdf]' –
一個不存在的進程是沒有獲得蜜蜂的進程(例如,使用'wait'或'waitpid')。 – ikegami
我添加了waitpid,它在我添加'open(my $ fhIN,'<','/ dev/null')或者死掉$!時起作用。 dup2(fileno($ fhIN),0)或死亡$!如果fileno($ fhIN)!= 0; 本地* STDIN;打開(STDIN,'<&=',0)或死亡$ !;'在那之後,我無法通過html輸出任何內容。它寫入到一個文件罰款,所以我知道它的作品,但我不能寫入瀏覽器。 –