2011-02-02 63 views
0

我有一個充滿腳本文件的文件夾。當我運行它們時,會打開它們原生的程序,它會執行一些操作並生成一個CSV文件。我寫了一些代碼,我想運行每個腳本文件並生成一堆CSV文件,每個腳本一個。如何避免需要等待並關閉一些由Perl驅動的軟件?

會發生什麼情況如下:當我的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 ("$_") 
} 
+0

外部應用是否提示輸入?如果它正在做任何需要用戶交互的任何事情,那麼perl當然會一直掛起,直到給出輸入。 – 2011-02-03 00:01:16

+0

好吧,這不像提示輸入。一旦完成運行,它需要關閉,因爲它只是打開數據表而掛起,而perl沒有看到。 – nebulus 2011-02-03 00:05:48

回答

1

我想你會想fork和exec和waitpid - 即設置並運行你自己的進程,並等待它自己完成。

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

這是不容易的,但不幸的是,你的OS不是腳本友好做這個。在Linux或OS X下執行此操作,您不會遇到任何此類問題。

你需要弄清楚這些命令是否可以在Windows下使用。如果沒有posix兼容性庫,您可能必須找到一些在Windows下可用的類似的東西。

1

你最好的選擇是在應用程序完成後很好地關閉應用程序。例如, cmd.exe命令的參數/ C完全相同。

嘗試使用/?運行應用程序,並查看是否有任何有用的東西出現。

如果沒有這樣做,您可以使用Win32 :: Process創建該進程,然後在確定完成後將其終止。請參閱相關文檔。