如何让 Perl 对管道输入和键盘输入使用不同的句柄?

发布于 2024-10-15 14:47:51 字数 137 浏览 4 评论 0原文

我有一个处理管道的 Perl 脚本。在某些时候,我希望脚本暂停并要求用户键盘输入。 我的 $input =; 不起作用。它只是从管道中读取下一行。如何让 Perl 使用不同的句柄进行管道输入和键盘输入?

I have a Perl script processing a pipe. At some point, I would like the script to pause and ask for user keyboard input. my $input = <STDIN>; does not work. It just reads next line from the pipe. How can I make Perl use different handles for pipe input and keyboard input?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

太阳公公是暖光 2024-10-22 14:47:51

如果您使用的是 Unix 平台,则可以打开一个文件句柄 /dev/tty (或使用 IO::Pty)。
使用 tty 的一个很好的例子是“测试程序是否以交互方式运行”示例:http://pleac.sourceforge.net/pleac_perl/userinterfaces.html

您还应该考虑通过 Term::ReadKey (在 perlfaq8) - 我认为它可能与 TTY 而不是 STDIO 相关,但我不确定。如果不是,请使用 brian d foy 的回答

这是一个例子。

这不是最好的风格(不使用 open 的 3-arg 形式,也不使用词法文件句柄),但它应该可以工作。

use autodie; # Yay! No "or die '' "
use Term::ReadKey;
open(TTYOUT, ">/dev/tty");
print TTYOUT "Password?: ";
close(TTYOUT);
open(TTY, "</dev/tty");
ReadMode('noecho', *TTY);
$password = ReadLine(0, *TTY);

If you are on a Unix platform, you can open a filehandle to /dev/tty (or use IO::Pty).
A good example of working with tty is in "Testing Whether a Program Is Running Interactively" example here: http://pleac.sourceforge.net/pleac_perl/userinterfaces.html

You should also consider doing password IO via Term::ReadKey (described in perlfaq8) - I think it may be tied to TTY instead of STDIO but am not sure. If it isn't, use the TTY+Term::ReadKey solution listed at the end of this SO answer by brian d foy.

Here's an example.

It's not the best style (doesn't use 3-arg form of open, nor uses lexical filehandles) but it should work.

use autodie; # Yay! No "or die '' "
use Term::ReadKey;
open(TTYOUT, ">/dev/tty");
print TTYOUT "Password?: ";
close(TTYOUT);
open(TTY, "</dev/tty");
ReadMode('noecho', *TTY);
$password = ReadLine(0, *TTY);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文