首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >保持perl脚本运行

保持perl脚本运行
EN

Stack Overflow用户
提问于 2016-01-17 17:16:44
回答 1查看 2.7K关注 0票数 4

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

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

此代码如下所示

代码语言:javascript
复制
#!/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之后删除所有内容,那么我的应用程序一运行就会退出。

我试过包括一个like循环,它能睡上5秒,但这不起作用(这个应用程序看起来就像是挂起的)。

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-01-17 17:46:12

如果你用一些不知道声发射的东西(例如sleep)阻止,那么AE事件就不会被处理。

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

代码语言:javascript
复制
my $done_cv = AE::cv;
$done_cv->recv;

使用$done_cv->send;结束睡眠。例如,如果你想睡5秒,你可以用

代码语言:javascript
复制
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;
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34841185

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档