我正在尝试使用Perl中的永久用户作为特定用户来启动NodeJS服务器。
这是我第一次使用Perl编程,因此可能很容易解决。我已经浏览了许多示例,但是我看到的只是关于函数system
和的冲突信息exec
。
在我的Perl模块文件中,我同时尝试了system
和exec
。
使用系统:
sub start_server {
my ( $result ) = @_;
my $return = system("forever --uid nodejs-34534 -a start /path/to/server.js");
$result->data($return);
return 1;
}
我应该如何forever --uid nodejs-34534 -a start /path/to/server.js
在Perl中运行命令?它不返回任何内容或显示任何错误,并且例如运行其他命令可以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为何停止该过程,是否有任何想法?
要将命令的输出存储在变量中时,请使用反引号更改系统:
my $return = `forever --uid nodejs-34534 -a start server.js`;
请参阅此内容以了解system
和backticks
:https : //stackoverflow.com/a/800105/4248931
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句