如何避免等待和关闭Perl驱动的某些软件?

时间:2011-02-02 23:57:29

标签: perl cmd

我有一个充满脚本文件的文件夹。当我运行它们时,会打开它们本机的程序,它会执行一些操作并生成CSV文件。我写了一些代码,我想运行每个脚本文件并生成一堆CSV文件,每个脚本一个。

以下情况如下:执行我的Perl应用程序时,将启动软件并成功运行第一个脚本(创建CSV文件)。但是,在此步骤中,Perl应用程序在我继续之前等待我关闭软件。它为每个脚本执行此操作。我该怎么做才能避免这种情况发生?

use strict;
use warnings;

use Cwd;
my $dir = cwd();

opendir(DIR, $dir);
my @files= grep(/\.acs$/,readdir(DIR));

$dir=~s/\//\\/g;
chdir $dir;
foreach (@files)
{
    print "$_\n";
    system ("$_")
}

2 个答案:

答案 0 :(得分:1)

我认为你需要fork和exec以及waitpid - 即设置并运行你自己的进程并等待它自己完成。

http://larc.ee.nthu.edu.tw/~cthuang/courses/ee2320/12_process.html

这并不容易,但遗憾的是,您在不适合脚本的操作系统上执行此操作。在Linux或OS X下执行此操作,您不会有这样的麻烦。

您需要弄清楚这些命令是否在Windows下可用。如果没有posix兼容库,您可能必须找到一些Windows下可用的类似内容。

答案 1 :(得分:1)

你最好的选择是在应用完成后很好地要求应用程序关闭。 例如,cmd.exe命令具有完全相同的参数/ C.

尝试使用/?运行应用程序,看看是否有任何有用的东西。

如果失败了,您可以使用Win32 :: Process创建进程,然后在确定完成后将其终止。请参阅相关文档。