加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 21:32:55 所属栏目:大数据 来源:网络整理
导读:我在 Windows上运行以下代码片段.从客户端读取后,服务器开始连续监听.我希望在一段时间后终止此??命令. 如果我在main.pl中使用alarm()函数调用,那么它会终止整个Perl程序(这里是main.pl),所以我通过将它放在一个单独的Perl文件中来调用这个system命令 并使用
我在 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 completedn";

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修正了这个问题.

祝好运,:)

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读