【发布时间】:2012-04-01 09:13:53
【问题描述】:
我正在尝试从使用 Statistics::R 包的简单 perl 脚本制作 .exe。
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 模块 (仅)尝试使用 $^X 运行子进程,它通常包含 perl.exe 的路径。但是,当 PAR 打包可执行文件时,$^X 不会 碰巧指向 perl.exe,因此 IPC::Run 在那一点上失败。 在不使用子进程的情况下在 Windows 上实现 IPC::Run 是一个未解决的问题。
最后,线程解决方案是使用IPC::Run3,这里不是选项。
对于如何克服这个问题有什么建议吗?
【问题讨论】: