Perl:perl脚本之间的握手机制



我使用System()从另一个派遣一个perl脚本,我希望这些脚本具有通信(握手的机制),其中基于一个脚本的输出,我可以执行在另一个中进一步处理。

请看一下:

可以说我在Main.pl

  1 #!/usr/bin/perl 
  2 
  3 use strict;
  4 use warnings;
  5 use Net::OpenSSH;
  6 
  7 #check for if the socket is established
  8 #call the client (host) script
  9 my $pwd = $ENV{'PWD'};
  10 my $rc = system("$pwd/utpsm_run_automation/utpsm_lts_client.pl")                                 
  11         or die "cant run client.pl $! n";

在我正在调用的上面脚本中,我想看看是否建立了与服务器的连接,因此我需要的某些握手机制,基本上是在Main.pl中进行进一步处理。在运行后的脚本上方。我现在清除了吗?

这是client.pl

 1 #!/usr/bin/perl
 2 use strict;
 3 use warnings;
 4 use IO::Socket::INET;
 5 use Net::OpenSSH;
 6 #auto-flush on socket
 7 $| = 1;
 8 
 9 #create a connecting socket
 10 my $socket = new IO::Socket::INET (
 11           PeerHost => 'ltsbm.aus.XX.XX',
 12           PeerPort => 7777,
 13           Proto => 'tcp',
 14           );
 15 die "cannot connect to the server$! n" unless     $socket;                                          
 16 print "VIRU ::connected to the server n";
 17 
 18 #data to send to the server
 19 my $req = 'VIRU :: Sending data n';
 20 sleep(20);
 21 my $size = $socket->send($req);
 22 
 23 #sending file over socket using scp

这是client.pl

我同意以前的评论者,首先,总体想法不是很好。谁想出了该体系结构的要求,可能会知道一些外壳脚本,但不知道perl。

也就是说,如果您确定您的输出不是很长,并且只有在子进程完成时才可以处理它, @xxfelixxx使用qx//的想法绝对是最简单的。如果您想在孩子仍在运行时处理输出,并且/或输出可能很大,以至于最好按线进行处理,则可以轻松地在open()调用中设置管道:

open my $pipe, '-|', $program_name or die "Could not run $program_name: $!'; while(<$pipe>) { ... # read process output } 比设置命名管道并进行fork()/exec()舞蹈的简单任务要容易得多,并且容易发生。

我假设您已经有一个client.pl的结果列表。为您的参考创建返回代码表,以供客户端脚本的每个可能结果,例如:

0 = success connecting to server
1 = unable to ping remote server
2 = socket error

在客户端脚本完成之前,请使用返回代码退出。示例:

exit 1;

现在有主脚本捕获返回代码&amp;通过if语句解析。主脚本可以根据返回的返回代码来采取措施。

相关内容

  • 没有找到相关文章

最新更新