如何在控制台中读取 while true 进程的输出?

发布于 2024-12-18 06:17:17 字数 444 浏览 0 评论 0原文

对于代码

my $ssh = Net::SSH::Perl->new($host);
$ssh->login($user, $pass);
my($stdout, $stderr, $exit) = $ssh->cmd($cmd);
print "STDOUT: $stdout STDERR: $stderr EXIT: $exit";

如果我的 $cmd 是“ls”,那么 $stdout 可以有正确的输出。

但是,如果我的 $cmd 是“perl whileTrue.pl”,那么我如何在运行 perl 时获得输出?在 whileTrue.pl 中,它将在控制台中打印我的输入。

因为如果我不通过 ssh 运行它,输出将打印到控制台。然而,当我 ssh 时,我无法看到我的输出,直到我真正结束这个过程。

我可以有类似冲洗概念的东西吗?

For the code

my $ssh = Net::SSH::Perl->new($host);
$ssh->login($user, $pass);
my($stdout, $stderr, $exit) = $ssh->cmd($cmd);
print "STDOUT: $stdout STDERR: $stderr EXIT: $exit";

If my $cmd is "ls", then $stdout can have a correct output.

However, if my $cmd is "perl whileTrue.pl", then how can I have the output while running the perl? In whileTrue.pl, it will print my input in console.

Because if I not ssh to run it, the output will print to the console. However, when I ssh it, I cannot see my output until I really end this process.

Can I have something like flush concept?

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

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

发布评论

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

评论(2

吻泪 2024-12-25 06:17:17

看起来像 register_handler 方法允许对输出进行非阻塞处理。

Seems like register_handler method allows for non-blocking processing of the output.

舟遥客 2024-12-25 06:17:17

您还可以使用 Net::OpenSSH 代替 Net::SSH::Perl :

use Net::OpenSSH;
my $ssh = Net::OpenSSH->new($host, user => $user, password => $pass);
$ssh->system($cmd);

You can also use Net::OpenSSH instead of Net::SSH::Perl:

use Net::OpenSSH;
my $ssh = Net::OpenSSH->new($host, user => $user, password => $pass);
$ssh->system($cmd);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文