我對Perl相當陌生,並且一直在搜索interwebs文檔以查找我正在嘗試執行的操作。我沒有任何運氣。在Perl中使用Expect並將文件傳輸到文件
我有一個程序,通過提示輸出信息到標準輸出。我需要製作一個Perl腳本來將這些信息傳遞給一個文件。
我想我可以使用Expect,但在第一次提示後管道似乎有問題。
這裏是我的代碼的一部分:
# Run program and compare the output to the BASE file
$cmd = "./program arg1 arg2 arg3 arg4 > $outfile";
my $exp = new Expect;
$exp->spawn($cmd);
BAIL_OUT("couldn't create expect object") if (! defined $exp);
$exp->expect(2);
$exp->send("\n");
對於這種情況,只有一個提示用戶按「Enter」鍵。這個程序很小,速度非常快 - 2秒鐘就可以達到第一個提示。
輸出文件只包含前半部分信息。
有沒有人有任何建議,我怎麼能抓住下半場呢?
更新: 我驗證過這個作品與期待通過使用一個簡單的腳本:
spawn ./program arg1 arg2 arg3 arg4
expect "<Return>"
send "\r"
interact
其中「<返回>」是一個冗長的表達式的Perl腳本可以尋找。
注:我已經嘗試編寫我的Perl腳本以期望「<返回>」...它沒有區別。
即
$exp->expect(2, '-re', "<Return>")
有什麼想法?
UPDATE2:
Hazaah!我找到了解決我的問題的辦法......完全是偶然的。
所以,我在一些測試代碼,我做了一個輸入錯誤......
$exp->expect(2);
$exp->send("\r");
$exp->expect(2);
注意結尾的預期(2)......我不小心留下,在和它的工作!
所以,我試圖理解發生了什麼。 Unix期望看起來不是這樣工作的!看起來Expect在Perl中實現「預計」任何事情......不僅僅是提示?
所以,我提供了期待另外2秒收集標準輸出,我能夠得到的一切。
如果任何人都可以提供一些更詳細的信息,瞭解到底發生了什麼,我很想知道發生了什麼。
您確定您需要使用Expect嗎?這似乎是矯枉過正,尤其是當你剛接觸Perl時。 – TLP
有沒有其他建議?除了這個問題之外,我沒有遇到任何似乎太複雜的事情。 – Rico