gpt4 book ai didi

perl - 保持 perl 脚本运行

转载 作者:行者123 更新时间:2023-12-03 12:15:33 27 4
gpt4 key购买 nike

我有一个使用 AnyEvent::MQTT 订阅消息队列的 perl 脚本。

目前我想要它做的就是在收到消息时打印出来。我对 perl 完全陌生,所以我正在使用它附带的演示代码,其中包括将 STDIN 上的任何内容作为消息发布的位 - 这很好用,我可以看到收到的所有消息。

这段代码如下所示

#!/usr/bin/perl
use strict;
use warnings;

use AnyEvent::MQTT;
my $mqtt = AnyEvent::MQTT->new;
my $cv = $mqtt->subscribe(topic => '/AlarmMode',
callback => sub {
my ($topic, $message) = @_;
print $topic, ' ', $message, "\n"
});

my $qos = $cv->recv; # subscribed, negotiated QoS == $qos



# publish line-by-line from file handle
$cv = $mqtt->publish(handle => \*STDIN,
topic => '/topic');

我的问题是,如果我在评论后删除所有内容 publish line-by-line from file handle然后我的应用程序一运行就退出。

我试过包括一个 sleep 5 秒的 while 循环,但这不起作用(该应用程序看起来像是挂了)。

我知道我需要做一些事情来告诉应用程序只是为了保持活力和冷静,但我不知道该命令是什么:-)

最佳答案

如果您使用不支持 AE 的内容(例如 sleep )进行阻止,则不会处理 AE 事件。

要在允许处理 AE 事件的同时休眠,通常使用

my $done_cv = AE::cv;
$done_cv->recv;

使用 $done_cv->send;结束 sleep 。例如,如果你想睡 5 秒,你会使用
my $sleep_cv = AE::cv;
my $w = AE::timer(5, 0, $sleep_cv); # Short for AE::timer(5, 0, sub { $sleep_cv->send });
$sleep_cv->recv;

关于perl - 保持 perl 脚本运行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34841185/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com