在Perl中运行此命令的正确方法是什么,没有错误返回

时间:2016-12-19 08:08:50

标签: perl perl5

我正在尝试使用Perl中的NodeJS作为特定用户启动forever服务器。

这是我第一次使用Perl进行编程,因此可能很容易解决。我看了很多例子,但我看到的只是关于函数systemexec的相互矛盾的信息。

在我的Perl模块文件中,我尝试了systemexec

使用system

sub start_server {
    my ( $result ) = @_;

    my $return = system("forever --uid nodejs-34534 -a start /path/to/server.js");

    $result->data($return);

    return 1;
}

我应该如何在Perl中运行命令forever --uid nodejs-34534 -a start /path/to/server.js?它没有返回任何内容或显示任何错误并运行其他命令,例如echo "$user"工作正常,并返回运行Perl脚本的用户的当前用户名。

更新

在下面的许多评论之后,我正在使用错误的函数来获得所需的输出。我本来应该使用数组变量和反引号,感谢@zdim指出这一点。这解决了没有看到执行命令输出的问题。

使用反引号进行了更正:

sub start_server {
    my ( $result ) = @_;

    my @output = `forever --uid nodejs-34534 -a start /path/to/server.js`;

    $result->data( \@output );

    return 1;
}

然后又出现了另一个问题,该命令被调用但在收到输出后被停止,之后@Borodin表示我应该创建一个脚本和模块,只需要什么,并测试它是否可以自行运行。在创建了削减模块并运行它之后,执行的命令保持活动状态,所以现在我知道它不能保持活着的问题归结为我正在尝试扩展的Perl API。

我是否有任何想法可以解决为什么我正在扩展的Perl API正在停止这个过程?

1 个答案:

答案 0 :(得分:1)

如果要将命令的输出存储在变量中,请使用反引号更改系统:

my $return = `forever --uid nodejs-34534 -a start server.js`;

请参阅此内容以了解systembacktickshttps://stackoverflow.com/a/800105/4248931