我有一個Perl腳本,用反引號調用另一個程序,並檢查某些字符串的輸出。這運行良好。Perl腳本與另一個程序的STDIN交互
我遇到的問題是當其他程序在做什麼時出現故障並等待用戶輸入。它要求用戶在退出程序之前按兩次輸入。
如何告訴我的Perl腳本在此程序上按兩次Enter?
我有一個Perl腳本,用反引號調用另一個程序,並檢查某些字符串的輸出。這運行良好。Perl腳本與另一個程序的STDIN交互
我遇到的問題是當其他程序在做什麼時出現故障並等待用戶輸入。它要求用戶在退出程序之前按兩次輸入。
如何告訴我的Perl腳本在此程序上按兩次Enter?
的啓動命令從您的腳本接收到相同的STDIN和STDERR,只是STDOUT通過管道輸送到你的腳本。
您可以在運行命令之前關閉STDIN,並且不會有輸入源。從標準輸入讀取會導致錯誤和被叫命令將退出:
close STDIN;
my @slines = `$command`;
這也將導致控制檯輸入的任何機會,你的腳本。
另一種方法是使用IPC::Open2
,讓你的腳本在同一時間,以控制標準輸入和命令的標準輸出:
use IPC::Open2;
open2($chld_in, $chld_in, 'some cmd and args');
print $chld_in "\n\n";
close $chld_in;
@slines = <$chld_out>;
close $chld_out;
這個腳本提供了命令所需的兩個\n
輸入和讀取命令的輸出。
我發現使用'close STDIN'不允許我捕獲正在運行的程序的完整輸出。我假設你的代碼中有一個錯字 - 它應該是'open2($ chld_out,$ chld_in,'一些cmd和args');'? 但是我仍然遇到同樣的問題 - 我讀過這是因爲我在Windows上運行? –
我設法通過在open2行之後添加兩行來實現這個工作:'sleep(10);打印$ chld_in;' - 我假設它發送給孩子,然後準備好接受\ n \ n,並且我發現在其他地方打印$ chld_in可以幫助Windows系統。謝謝@Sebastian指引我朝着正確的方向前進 –
你可以只管他們:
echo "\n\n" | yourcommand
我當前的代碼看起來是這樣的:我 = @slines'「$ command'; 難道則成爲: 我@slines = echo「\ n \ n」|'「$ command'; ? –
http://search.cpan.org/~rgiersig/Expect-1.15/Expect.pod – xxfelixxx