【问题标题】:Passing arguments to interactive fortran program将参数传递给交互式 fortran 程序
【发布时间】:2015-05-19 01:12:09
【问题描述】:

我有一个 fortran 程序(我无法修改),它在运行时需要用户(在命令行中)的多个输入。该程序需要很长时间才能运行,我想通过在后台运行来保留终端的使用;但是,由于其交互性,这是不可能的。

有没有一种方法,使用 bash 脚本或其他方法,我可以将参数传递给程序,而无需通过命令行直接与它交互?

我不确定这是否可能;我尝试搜索它,但结果是空的,虽然我不确定要搜索什么。

谢谢!

ps。我正在使用一个无法安装尚未存在的东西的 unix 系统。

【问题讨论】:

  • 根据输入的读取方式,管道到标准输入可能会起作用。
  • 你不能打开另一个终端会话来做你的非 Fortran 工作?
  • 我可以打开另一个终端...但是还有很多 Fortran 工作要做。

标签: bash fortran interactive


【解决方案1】:

你可以用管道输入:

$ cat delme.f90
program delme
    read(*, *) i, j, k
    write(*, *) i, j, k
end program delme

$ echo "1 2 3" | ./delme
           1           2           3

$ echo "45 46 47" > delme.input
$ ./delme < delme.input
          45          46          47

$ ./delme << EOF
> 3 2 1
> EOF
           3           2           1

【讨论】:

  • 谢谢!这正是我所需要的,我什至不知道它是可能的,更不用说这么简单了。我特别喜欢第二种解决方案。
  • 这个答案是否特定于fortran 90?或者可能是特定的 fortran 编译器(gfortranf77)。我有同样的问题,但正在使用一些遗留的 fortran 77 代码。
  • 这是独立于编译器的,它与shell一起工作。所以这取决于你的操作系统。任何 Linux 或 MacOS 都应该没问题,但我不知道 Windows。
  • 你也可以使用这里的字符串:./program &lt;&lt;&lt; 42。如果program 多次读取输入,您可以使用ANSI C 字符串./program &lt;&lt;&lt; $'42\n19' 插入换行符。
猜你喜欢
  • 2013-01-01
  • 1970-01-01
  • 2018-10-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多