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

如何避免等待和关闭一些由Perl驱动的软件?,perl,cmd,Perl,Cmd,我有一个装满脚本文件的文件夹。当我运行它们时,会打开它们本机的程序,它会执行一些操作,并生成一个CSV文件。我编写了一些代码,希望运行每个脚本文件并生成一组CSV文件,每个脚本一个 发生的情况如下:当我的Perl应用程序被执行时,软件被启动,第一个脚本被成功运行(一个CSV文件被创建)。但是,在这一步中,Perl应用程序等待我关闭软件,然后再继续。它对每个脚本都这样做。我能做些什么来避免这种情况发生 use strict; use warnings; use Cwd; my $dir = cw

我有一个装满脚本文件的文件夹。当我运行它们时,会打开它们本机的程序,它会执行一些操作,并生成一个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 ("$_")
}

我认为您需要fork、exec和waitpid,即设置并运行自己的流程,然后等待它自己完成

这并不容易,但不幸的是,您在不支持脚本的操作系统上执行此操作。在Linux或OS X下这样做不会有任何类似的麻烦


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

您最好的选择是在完成后要求应用程序关闭自己。 例如,cmd.exe命令的参数/C正好可以做到这一点

尝试使用/?运行应用程序,并查看是否出现任何有用的结果


否则,您可以使用Win32::Process创建进程,然后在确定完成后将其杀死。请参阅文档。

外部应用程序是否提示输入?如果它正在做任何需要用户交互的事情,那么perl当然会一直挂起,直到输入被给出为止。一旦它完成运行,就需要关闭它,因为它只是挂起在打开的数据表中,perl看不到这一点。这是Windows吗?@mob,是的,它的Windows,$\ux=script.acsfork以及exec和waitpid在Windows中已经存在很长时间了。但听起来,在OP手动关闭程序之前,子进程不会完成(waitpid不会返回)。perl不会要求您“完成程序”-我猜它正在打开cmd.exe窗口,而您必须关闭窗口?