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

如何通过R调用Fortran可执行文件并实现输入文件交互

问题根因

你遇到的两个报错分别对应两个核心错误:

  • 你的Fortran程序是从标准输入(控制台交互)读取输入文件名,而非读取命令行参数,所以直接将Psib_future.IN作为参数传给system2程序无法识别,会持续等待控制台输入直到读取到EOF,触发你看到的Fortran end-of-file报错
  • 后续的shell命令存在语法错误:括号未闭合,且逻辑错误,你需要将输入文件名传给exe程序,而非先输出exe本身的名称

解决方案

方案1:自动传入输入文件名(无需手动交互,推荐)

直接用system2的input参数将交互内容按行传给程序的标准输入,不需要用户手动输入,操作步骤如下:

  1. 先切换工作目录到exe所在文件夹,避免路径匹配问题
setwd("C:/Users/S. Sundar/Downloads")
  1. 调用system2传入输入内容
system2("psibtflCT.exe", input = "Psib_future.IN", stdout = "", stderr = "")

如果程序后续还有其他交互输入项,只需要把所有要输入的内容按顺序拼成字符向量传给input参数即可,示例:input = c("Psib_future.IN", "第二个输入值", "第三个输入值")

方案2:触发手动交互窗口输入

如果确实需要手动输入内容,让程序弹出独立的控制台窗口显示输入提示,可使用如下命令:

setwd("C:/Users/S. Sundar/Downloads")
# 弹出独立cmd窗口运行程序,会正常显示交互提示,等待手动输入
system2("cmd.exe", args = c("/c", "start", "psibtflCT.exe"), wait = FALSE)

运行后会弹出新的cmd窗口,按提示输入Psib_future.IN回车即可完成交互。


之前shell命令的修正写法

你之前的shell命令除了语法错误,逻辑上也应该用管道将输入内容传给exe,修正后可运行的写法如下:

shell("cd C:\\Users\\S. Sundar\\Downloads && echo Psib_future.IN | psibtflCT.exe", intern = TRUE)

该写法效果和方案1一致,但不如直接用system2的input参数兼容性好。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.16 16:06:05