如何在Perl中终止带有警报的系统命令?

前端之家收集整理的这篇文章主要介绍了如何在Perl中终止带有警报的系统命令?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 Windows上运行以下代码片段.从客户端读取后,服务器开始连续监听.我希望在一段时间后终止此​​命令.

如果我在main.pl中使用alarm()函数调用,那么它会终止整个Perl程序(这里是main.pl),所以我通过将它放在一个单独的Perl文件中来调用这个system命令
并使用system命令在原始Perl文件调用此Perl文件(alarm.pl).

但是通过这种方式,我无法在原始Perl文件或被调用的Perl文件调用此system()的输出.

请问任何人请让我知道终止系统()调用的方式或以我上面使用的方式获取输出

main.pl

my @output = system("alarm.pl");
print"one iperf completed\n";

open FILE,">display.txt" or die $!; 
print FILE @output_1; 
close FILE;

alarm.pl

alarm 30;
my @output_1 = readpipe("adb shell cd /data/app; ./iperf -u -s -p 5001");

open FILE,">display.txt" or die $!; 
print FILE @output_1; 
close FILE;

在这两种方式中,display.txt始终为空.

解决方法

这里有几个单独的问题.

首先,为了防止alarm杀死你的脚本,你需要处理ALRM信号.请参阅alarm文档.你不应该需要两个脚本.

其次,system不捕获输出.如果你想这样做,你需要一个反引号变体或管道. Stackoverflow上已经有了答案.

第三,如果alarm.pl将任何内容放入display.txt中,则在写入模式下重新打开文件时,会在main.pl中将其丢弃.您只需要在一个地方创建文件.当你摆脱额外的脚本,你不会有这个问题.

我最近遇到了一些警报和系统问题,但switching to IPC::System::Simple修正了这个问题.

祝好运,:)

猜你在找的Perl相关文章