2012-04-01 5 views
0

통계 :: R 패키지를 사용하는 간단한 perl 스크립트에서 .exe를 만들려고합니다.통계 얻기 :: R PerlApp (또는 PAR) 함께 작동

use Statistics::R; 
use strict; 
my $R = Statistics::R->new(); 
$R->startR; 
$R->send('x=10'); 
$R->send('x'); 
my $ret = $R->read; 
print $ret; 
$R->stopR(); 

Perlapp .exe 파일을 만들 때까지 모든 것이 제대로 작동합니다. 나는이를 테스트 할 때, 나는 다음과 같은 오류를 얻을 :

Inappropriate I/O control operation: Win32::Process::Create() at /<C:\@programming\r\trying_r_bridge.exe>IPC/Run.pm line 2105 
Inappropriate I/O control operation: Win32::Process::Create() at /<C:\@programming\r\trying_r_bridge.exe>IPC/Run.pm line 2224 
Inappropriate I/O control operation: Win32::Process::Create() at /<C:\@programming\r\trying_r_bridge.exe>IPC/Run.pm line 2224 

내가 온라인보고와 문제에 대한이 스레드를 발견 : http://www.nntp.perl.org/group/perl.par/2011/05/msg5022.html

이것은 그들이 말하는 :

이는 때문에 발생 Win32에서 IPC :: Run 모듈 (전용)은 일반적으로 perl.exe의 경로를 포함하는 $^X를 사용하여 하위 프로세스를 실행하려고 시도합니다. 그러나 PAR이 실행 파일을 압축하면 $^X는 이 perl.exe를 가리 키지 않으므로 그 시점에서 IPC :: Run이 실패합니다. 서브 프로세스를 사용하지 않고 Windows에서 IPC :: Run을 구현하는 것은 해결되지 않은 문제입니다.

결국 스레드 솔루션은 여기에 옵션이없는 IPC :: Run3을 사용합니다.

이 문제를 해결하는 방법에 대한 제안 사항이 있으십니까?

답변

2

나는 운명에 처해 있다고 생각합니다. .exe 파일을 만들지 마십시오. 딸기 휴대용을 사용하고 일괄/vbs 스크립트를 사용하여 물건을 실행하십시오. 통계 :: R은 상당히 취약한 구현 IIRC입니다. 나는 누군가가 더 나은 플랫폼 독립적 인 R/perl 커넥터의 개발을 후원하는 것을보고 싶다. 한편 여기에 배치 스크립트는 적응할 수있다 :

echo off 
    set bindir=%~dp0 
    set perlpath=%bindir%perl\bin 
    set buildpath=%bindir%\bin 
    set PATH=%PATH%;%perlpath%;%buildpath% 
    "%perlpath%\perl.exe" "%bindir%myscript.pl 

을 그리고 여기에 cmd를 윈도우 설정하지 않고 배치 스크립트를 실행하는 VBS 스크립트입니다 :

Set fso = CreateObject("Scripting.FileSystemObject") 
    Set WshShell = CreateObject("WScript.Shell") 
    WshShell.Run chr(34) & fso.GetParentFolderName(wscript.ScriptFullName) & "\perlshell.bat"& Chr(34), 0 
    Set WshShell = Nothing 
+0

감사합니다. 그러나 통계 :: R은 exe를 통해 배포해야하는 훨씬 더 큰 프로젝트에 필요합니다. 다른 모든 것은 괜찮지 만이 모듈은 문제를 일으키고 있습니다. 좋은 R/perl 브릿지가 훌륭하다는 데 동의합니다. – Lozzer

+0

당신은 Statistics : R을 패치하여 IPC를 개선하거나 다른 horrendus 해결 방법을 적용 할 것입니다. – singingfish

+0

아마! Statistics : R 개발자에게 이메일을 보내서 제안 사항이 있는지 확인했습니다. 아직 답장이 없습니다. 나는 그들이 말하는 것을 여기에보고 할 것이다. – Lozzer

0

나는 통계 :: R 거의 다시 한의를 작년에는 플랫폼 독립적이며 견고한 환경을 제공합니다. IPC :: Run을 통해 R 및 다양한 IO에 대한 호출을 수행하기로했습니다.

분명히이 문제는 IPC :: Run에만 국한된 것으로 보입니다. 따라서 먼저 IPC::Run tracker에서 티켓을 발급 받아야합니다. 필자는 IPC :: Run의 작성자가 수정 프로그램을 구현하는 것이 얼마나 실현 가능성이 있는지 모르지만 최소한 수행 할 수있는 작업은 비 호환성을 설명하는주의 사항 섹션입니다.

Statistics :: R에서 IPC :: Run 대신 IPC :: Run3을 사용하는 것은 Statistics :: R의 요구 사항 (주로 stdin, stdout 및 stderr을 사용하여 R과 통신 함)을 충족시키는 경우 옵션이 될 수 있습니다. 그것은 드롭 인 (drop-in) 대체물이 아니기 때문에 사소한 변화가 아닙니다.

+0

나는 IPC의 저자 : 실행에 연락했다.그들은 문제를 바로 잡는 것이 매우 시간이 많이 걸리고 중요하지 않다고 말했다. 모듈을 정적 인 perl.exe 경로로 가리키고 그곳으로 갈 수 있는지 알아 보려고합니다. – Lozzer