2
我在Windows 7爲什麼IPC :: Open3調用cmd.exe而不是所請求的程序?
上運行的Perl 5.16.3這64位(含VC10編譯)當我運行是這樣的:
use strict;
use warnings;
use IPC::Open3;
use Symbol 'gensym';
my $command = q[perl -e "$| = 1; for (1..60) { print '.'; sleep 1 }"];
my ($in, $out, $err);
$out = gensym;
$err = gensym;
my $pid = open3($in, $out, $err, $command);
我可以在進程列表中看到實際通過IPC::Open3
稱爲命令是:
cmd.exe /x/d/c perl -e "$| = 1; for (1..60) { print '.'; sleep 1 }"
其中,當然,產生與實際調用子流程:
perl -e "$| = 1; for (1..60) { print '.'; sleep 1 }"
因此,我得到的對應於cmd.exe的pid
而不是perl.exe。
該文檔沒有提及任何有關此調用順序或有關Windows上不同行爲的任何內容。我沒有在這裏測試它的Linux/Unix盒子,但我敢打賭,它不會那樣做(如果有人可以測試,請告訴我,如果我錯了)。
無論如何,我想知道爲什麼IPC::Open3
這樣做?爲什麼不直接在該命令中調用perl?
在此先感謝您的任何意見。
偉大的答案。我從來沒有想過這兩個公約之間有實際的區別。謝謝! :-) –
同意@Francisco Zarabozo評論,很好的回答! – arkhamvm