perl スクリプトからプログラムを実行しようとしています。STDOUT と STDERR を 2 つの異なるファイルにリダイレクトします。私が実行しているプログラムは、プロセスハンドルに出力しようとするパスワードを要求しますが、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を待つ」ようにopenに指示するにはどうすればよいですか?
- -アップデート!
コマンドラインで次のようなテストを行いました。
echo password | some_program
認証エラーが出力されました。そのため、some_programは実際には STDIN からではなく tty から読み取っているようです。
プログラムがPerlでそこからパスワードを読み取ることができるように、ttyに出力する方法はありますか?