2011-02-02 2 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은 물론 입력이 제공 될 때까지 중단됩니다. –

+0

음, 입력을 요구하는 것이 아닙니다. 일단 실행이 끝나면 열린 데이터 테이블로 멈추고 perl은 그것을 볼 수 없기 때문에 닫아야합니다. – nebulus

+0

''$ _ "'의 모습을 보여주세요. 이 Windows인가? – mob

답변

1

나는 당신이 포크 싶은 간부 거라고 생각과는 waitpid - 즉 설정을하고 자신의 프로세스를 실행하고 자신에 완료 될 때까지 기다립니다.

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

이것은 쉬운 일이 아닙니다,하지만 불행히도, 당신은 스크립트 친화적 아닌 OS에이 일을하고 있습니다. Linux 또는 OS X에서이 작업을 수행하면 이와 같은 문제가 발생하지 않습니다.

Windows에서 이러한 명령을 사용할 수 있는지 알아야합니다. posix 호환 라이브러리가없는 경우 Windows에서 사용할 수있는 비슷한 항목을 찾아야 할 수도 있습니다.

+0

Windows에서 오랫동안 fork 및 exec와 waitpid를 사용할 수 있습니다. 그러나 OP가 수동으로 프로그램을 닫을 때까지 자식 프로세스가 완료되지 않고 waitpid가 반환되지 않는 것처럼 들립니다. – mob

+0

perl은 "프로그램을 완료하라"고 묻지 않습니다 - 저는 cmd.exe 창을 열어서 창을 닫아야한다고 생각합니다. – xaxxon

1

가장 좋은 방법은 응용 프로그램이 끝난 후 응용 프로그램을 멋지게 닫는 것입니다. 예를 들어, cmd.exe 명령에는 정확하게/C를 수행하는 매개 변수/C가 있습니다.

/?를 사용하여 응용 프로그램을 실행하고 유용한 것이 있는지 확인하십시오.

이 실패하면 Win32 :: Process를 사용하여 프로세스를 만든 다음 프로세스가 완료되었다고 확인한 후 프로세스를 종료 할 수 있습니다. 그것에 대한 문서를 참조하십시오.

관련 문제