将命令行输出保存到Fortran中的变量

时间:2018-11-23 13:32:14

标签: fortran gfortran

是否可以将命令行实用程序的输出存储到Fortran中的变量?

我有一个基于BASH的实用程序,该实用程序为我提供了一个需要在Fortran程序中使用的数字。我想通过程序本身调用该实用程序,并尽可能避免将输出写入文件中。

也许是这样?

ggpredict(m, "am") %>% plot()

还是这样?

integer a
write(a,*) call execute_command_line('echo 5')

我认为这些都不对。我想知道实际上是否有一种方法可以做到这一点。我阅读了read(call execute_command_line('echo 5'),*) a 的文档,但我认为子例程没有输出参数可以做到这一点。

1 个答案:

答案 0 :(得分:5)

由于您正在使用BASH,因此假设您正在某种类似Unix的系统上工作。因此,您可以使用FIFO。像

program readfifo
  implicit none
  integer :: u, i
  logical :: ex
  inquire(exist=ex, file='foo')
  if (.not. ex) then
     call execute_command_line ("mkfifo foo")
  end if
  call execute_command_line ("echo 5 > foo&")
  open(newunit=u, file='foo', action='read')
  read(u, *) i
  write(*, *) 'Managed to read the value ', i
end program readfifo

请注意,FIFO的wrt阻塞的语义可能有些棘手(这就是为什么echo命令后面有'&'的原因,您可能需要对其进行一些阅读和实验(特别是确保您没有当您多次执行此操作时,会有成千上万的bash进程挂起。