我正在尝试从使用 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,这里不是一个选项。
关于如何克服这个问题的任何建议?