我正在尝试从 perl 脚本运行程序。我将 STDOUT 和 STDERR 重定向到两个不同的文件。我正在运行的程序要求输入我尝试打印到进程句柄的密码,但这不起作用,因为程序会立即打印一个身份验证错误,警告我我没有向 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 调试器中运行了它,并注意到当调试器运行 open 行时,我可以运行注释掉的打印行并且错误已经在输出文件中。
那么,我忘记做什么才能使它起作用?我如何告诉 open “等待 STDIN”?
- -更新!
我在命令行中做了这样的测试:
echo password | some_program
并打印了身份验证错误。所以看起来some_program实际上不是从 STDIN 读取,而是从 tty 读取。
有没有办法打印到 tty 以便程序可以从 Perl 中读取密码?