次のコードは Linux では問題なく動作しますが、Windows マシンに配置すると、すべてが崩壊します。
$pid = open2($my_reader, $my_writer, "$JAVACALL $PARSER_CP $PARSER_CMD -");
$my_reader->autoflush(1);
$my_writer->autoflush(1);
print $my_writer "$line\n";
close($my_writer);
my $tree = <$my_reader>;
chomp($tree);
push @parse_trees, $tree;
close($my_reader);
waitpid($pid, 0);
Windows では、そのままハングアップしwaitpid($pid, 0)
ます。その行をコメントアウトすると、すべてが適切に終了しますが、多数の孤立したプロセスが残ります。私を混乱させているのは、ActiveState (私たちが使用している Perl) が実際に、私たちが行っているとおりに物事を行うように指示していることです。
これを行うためのWindowsに適した方法を知っている人はいますか? コードの 2 つの別々のバージョンを維持する必要があるとしても、この時点ではそれほど気にすることはできません。:)
(好奇心旺盛な方のために説明すると、このコードはStanford Parserを開きます。このファイルは入力としてファイルを受け取り (したがって、"-" (Linux と同様/同じ) を使用します/dev/stdin
)、それに文をスローし、解析ツリーを取得します。重要ではありませんが、私は誰かが尋ねようとしていることを知っています. :) )