首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >获取统计数据::r与PerlApp (或PAR)合作

获取统计数据::r与PerlApp (或PAR)合作
EN

Stack Overflow用户
提问于 2012-04-01 09:13:53
回答 2查看 522关注 0票数 0

我试图使用一个简单的perl脚本来生成一个.exe,该脚本使用了Statistics::R包。

代码语言:javascript
复制
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文件之前,一切都很好。当我测试这一点时,我会得到以下错误:

代码语言:javascript
复制
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在这一点上失败了。实现IPC::在Windows上运行而不使用子进程是一个尚未解决的问题。

最后,线程解决方案是使用IPC::Run3,这在这里不是一个选项。

对于如何克服这个问题,有什么建议吗?

EN

回答 2

Stack Overflow用户

发布于 2012-04-01 11:27:36

我觉得你死定了。只是不要制作一个.exe文件--使用草莓可移植,以及一个批处理/vbs脚本来运行您的东西。统计数据:R是一个相当脆弱的实施IIRC。我希望有人赞助开发一个更好的、独立于平台的R/perl连接器。同时,这里有一个可以修改的批处理脚本:

代码语言:javascript
复制
  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脚本:

代码语言:javascript
复制
  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
票数 2
EN

Stack Overflow用户

发布于 2012-04-04 06:17:57

我几乎完全重写了统计::r在过去的一年,使它更快,独立的平台和健壮。我选择通过IPC::Run执行对R和各种IOs的调用。

显然,您所描述的问题似乎特定于IPC::Run。因此,您应该首先在IPC::运行跟踪器上提交一张票证。我不知道IPC::Run的作者实现修复的可行性,但他们至少可以做的是有一个描述不兼容性的警告部分。

使用IPC::Run3代替IPC:Run in Statistics::R可能是一个选项,如果它满足Statistics::R的要求(主要使用stdin、stdout和stderr与R通信)。这不会是一个插足的替代,所以,不是一个微不足道的改变。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9963247

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档