You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

解决R中system2调用带终端输入的FORTRAN编译可执行文件失效问题

解决R中调用带输入重定向的Fortran可执行文件问题

我之前也遇到过类似的情况——直接在终端里用<重定向输入没问题,但用system2就卡壳了。这是因为system2的设计逻辑和终端shell不一样,它不会自动解析命令里的重定向符号,得换个方式处理,这里有两个靠谱的解决方案:

方法1:用system2的stdin参数指定输入文件

这是最推荐的方式,符合system2的设计规范,跨平台兼容性也更好:

# 直接将输入文件传给stdin参数
system2("pm.exe", stdin = "pm.resp")

这样R会自动把pm.resp的内容作为pm.exe的输入,和终端里的pm.exe < pm.resp效果完全一致。

方法2:用system函数调用shell解析重定向

如果你更习惯终端的写法,也可以用基础的system函数,让它通过系统shell来执行完整的命令:

# 让shell处理重定向符号
system("pm.exe < pm.resp", intern = FALSE)

intern=FALSE是默认值,它表示不捕获程序的输出,让程序按正常流程生成输出文件。

额外注意事项

  • 路径要准确:如果pm.exe或pm.resp不在当前工作目录,一定要用绝对路径,比如用file.path(getwd(), "pm.resp")生成正确的路径,避免因为找不到文件导致失败。
  • 权限检查:确保R有读取pm.resp和执行pm.exe的权限,Windows下如果程序需要管理员权限,记得右键以管理员身份运行R。
  • 排查错误:如果还是不行,可以捕获错误信息来定位问题:
    # 将错误信息写入日志文件
    system2("pm.exe", stdin = "pm.resp", stderr = "pm_error.log")
    # 或者直接在控制台显示错误
    system2("pm.exe", stdin = "pm.resp", stderr = "")
    

内容的提问来源于stack exchange,提问作者rjss

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 06:55:04