+ -
当前位置:首页 → 问答吧 → winXP下perl调用两个bat文件,求助!!

winXP下perl调用两个bat文件,求助!!

时间:2011-12-15

来源:互联网

想在perl脚本里调用两个bat文件,第一个bat调用后,perl不用等待它返回,继续运行后面代码。第二个bat调用后,既可以等bat返回,也可以不等它返回,perl继续运行。perl在windows平台上执行。
脚本如下,
my $path = "C:/scripts/PSDialUp";
chdir($path);
my $bat_file = "start.bat";
my $pid = fork();
if($pid==0){
my $start_result= system($bat_file);
logprint("Debug:start_result is $start_result");
}

sleep(10);
my $stop_file="stop.bat";
logprint("Debug: stop_file is $stop_file\n");
my $pid = fork();
if($pid==0){
system($stop_file);
}

执行的时候,启动bat后就跑了多遍。试过exec,程序中断。请各位大虾指点。

作者: fen7127   发布时间: 2011-12-15

重贴代码。

作者: iambic   发布时间: 2011-12-15


package steps::WCDMA_SYVE::CI::CP_CI_batch;
require Exporter;

use lib::config;
use lib::Error qw(:try);
use Socket;  
use Sys::Hostname;  
use Time::HiRes qw(usleep sleep time);
use strict;
use warnings;
use vars qw(@ISA @EXPORT);
@ISA = qw(Exporter);
@EXPORT = qw(batch);

sub batch{

my ($reader, $logstorage,$repository, $shared_stepLogDir,%instrs)= @_;

my $false = 0;
my $true = 1;
my $pid = undef;
try{
my $path = "C:/scripts/PSDialUp";
  chdir($path);
  my $bat_file = "start.bat";
  my $pid = fork();
  if($pid==0){
  my $start_result= system($bat_file); 
  logprint("Debug:start_result is $start_result");
  }

  sleep(10);
  my $stop_file="stop.bat";
  logprint("Debug: stop_file is $stop_file\n");
  my $pid = fork();
  if($pid==0){
  system($stop_file);
  }
  return $true;
}catch lib::Error with {
  my $ex = shift;
  logprint("\nDebug: An error was caught:$ex \n!!!\nCleaning up some processes\n");
  logprint("\nDebug: Cleanup finished\nTest has failed");
  return $false;
}

作者: fen7127   发布时间: 2011-12-15

这行可以忽略,这里没有用到。
my ($reader, $logstorage,$repository, $shared_stepLogDir,%instrs)= @_;

作者: fen7127   发布时间: 2011-12-15