保留一个 perl 脚本 运行
Keep a perl script running
我有一个使用 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
之后的所有内容,那么我的应用程序会在 运行.
时立即退出
我试过包含一个休眠 5 秒的 while 循环,但它不起作用(应用程序看起来就像挂起一样)。
我知道我需要做一些事情来告诉应用程序保持活力和冷静,但我不知道那个命令是什么:-)
如果您用 AE-aware 以外的内容进行阻止(例如 sleep
),则不会处理 AE 事件。
要在允许处理 AE 事件的同时休眠,通常使用
my $done_cv = AE::cv;
$done_cv->recv;
使用$done_cv->send;
结束睡眠。例如,如果你想睡 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;
我有一个使用 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
之后的所有内容,那么我的应用程序会在 运行.
我试过包含一个休眠 5 秒的 while 循环,但它不起作用(应用程序看起来就像挂起一样)。
我知道我需要做一些事情来告诉应用程序保持活力和冷静,但我不知道那个命令是什么:-)
如果您用 AE-aware 以外的内容进行阻止(例如 sleep
),则不会处理 AE 事件。
要在允许处理 AE 事件的同时休眠,通常使用
my $done_cv = AE::cv;
$done_cv->recv;
使用$done_cv->send;
结束睡眠。例如,如果你想睡 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;