1
我試圖從一個perl腳本運行一個程序。 我將STDOUT和STDERR重定向到兩個不同的文件。 我正在運行的程序要求輸入一個密碼,我嘗試打印到進程句柄,但這不起作用,因爲程序立即打印出一個驗證錯誤,警告我我沒有向STDIN寫入任何內容。Perl:打開管道進行寫入,但程序沒有「等待」STDIN
我使用的代碼與此類似:
my $s = qq(some_program > someprogram.out 2> someprogram.err);
open(my $f, "|$s") or die "Couldn't run program: $! $?";
# print `cat someprogram.out`; # An error has already been printed here!
print $f "password\n";
close $f or die "$!: $?";
我在Perl調試運行此,發現當調試運行開行,我可以運行註釋掉打印線和錯誤已經在輸出文件中。
那麼,我爲什麼忘了這麼做? 我如何判斷開放「等待STDIN」?
---更新!
我沒有在命令行這樣的試驗:
echo password | some_program
和印刷的認證錯誤。所以它看起來像some_program實際上不是從STDIN讀取,而是從tty讀取。
有沒有一種方法可以打印到tty,以便程序可以從Perl那裏讀取密碼?
你確定'some_program'是從標準輸入讀取密碼?如果'some_program'是ssh,爲了給出很多例子之一,它可能試圖從終端讀取,這與標準輸入不一定相同。 – mob 2012-07-30 18:24:40
嗨,暴徒。我不確定,但看起來是這樣的。我有什麼選擇? – 2012-07-30 19:15:01
Ssh不會和你的菸斗搭配得很好 - 使用Expect。 – 2012-07-30 21:57:17