我试图从使用Statistics :: 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 (only)上的IPC :: Run模块尝试使用$^X运行子进程,$^X通常包含perl.exe的 路径。但是,当PAR打包可执行文件时,$^X不会发生 碰巧指向perl.exe,因此IPC :: Run在此时失败。 实现IPC ::在Windows上运行而不使用子进程是一个未解决的问题。
最后,线程解决方案是使用IPC :: RUN3,这是不是一个不错的选择。
有关如何解决此问题的任何建议?
谢谢,但统计:: R需要一个更大的项目,必须通过exe分发。其他一切都很好,但这个模块造成了麻烦。我同意一个很好的R/perl桥将会非常出色。 – Lozzer 2012-04-02 08:55:58
你要么修补Statistics :: R来更好地处理windows IPC,要么应用其他一些horrendus解决方法 – singingfish 2012-04-02 22:15:46
可能!我通过电子邮件发送了统计:: R的开发者,看他们是否有任何建议。尚未回复。我会在这里汇报他们说的。 – Lozzer 2012-04-03 09:46:17