在我們的一個模塊中,我們檢查給定的二進制文件(varnishd
)是否存在,如果存在,我們運行其他測試。與perl 5.10.1一樣,IPC :: Open3 :: open3()不適用於perl 5.14.2?
執行檢查,我們使用IPC::Open3
,像這樣(例如剝離下來的清晰度):
perl -MIPC::Open3 -le '
my $binary = "varnishd";
my $pid = IPC::Open3::open3(my($in, $out), undef, $binary, "-V");
waitpid $pid, 0; print $?'
在Debian擠壓,或Ubuntu納蒂,與的Perl 5.10.1,如果varnishd
沒有在系統上找到,這爲我打印65280
。 如果將$binary
更改爲perl
,則(正確)打印0
。
然而,與Ubuntu精確和的Perl 5.14.2,這不會以同樣的方式工作了,併產生了以下內容:
$ perl -MIPC::Open3 -le '
my $binary = "varnishd";
my $pid = IPC::Open3::open3(my($in, $out), undef, $binary, "-V");
waitpid $pid, 0; print $?'
open3: exec of varnishd -V failed at -e line1
當我改變$binary
的東西存在,例如perl
,那麼它正常工作並打印0
。
$ perl -MIPC::Open3 -le '
my $binary = "perl";
my $pid = IPC::Open3::open3(my($in, $out), undef, $binary, "-V");
waitpid $pid, 0; print $?'
0
讀其他的問題和答案,它看起來像我想看看IPC::Run,但我想實際上是:
- 理解行爲
- 的這種差異避免更多的依賴如果可能的話
編輯:忘記提及這個東西運行在chroot環境,Squeeze和Precise系統,如果這是相關的(/dev
文件系統差異,例如?)。
酷,從源頭:) :)非常感謝! – cosimo