【发布时间】:2018-11-23 13:32:13
【问题描述】:
有没有办法将命令行实用程序的输出存储到 Fortran 中的变量中?
我有一个基于 BASH 的实用程序,它给了我一个需要在 Fortran 程序中使用的数字。我想通过程序本身调用该实用程序,并尽可能避免将输出写入文件。
可能是这样的吗?
integer a
write(a,*) call execute_command_line('echo 5')
或者像这样?
read(call execute_command_line('echo 5'),*) a
不过,我认为其中任何一个都不对。我想知道是否真的有一种方法可以做到这一点。我阅读了execute_command_line 的文档,但我认为没有执行此操作的子例程的输出参数。
【问题讨论】:
-
您必须使用临时“文件”。我无法立即找到我认为涵盖此的问题,但在 this one 中进行了一些讨论。
-
我一直在尝试制作问题中提到的 fortranposix 库,但未能成功(Makefile 中不存在目标文件的 fPIC 错误)。在我弄清楚时,是否还有其他库可以将诸如 popen 之类的 posix 功能添加到 Fortran 中?或者任何其他不依赖于外部非默认库的方式? @francescalus
-
一些编译器在它们的运行时捆绑了类似 POSIX 的东西,所以你可能会很幸运。但是,老实说,我只是将命令的标准输出写入一个真实文件,然后从我的 Fortran 程序中读取它。
-
问题是,这将进入一个数百万代的差分进化程序,有 40 个模型,每个模型有 4 个模型参数,循环超过 120 个数据点,因此总迭代次数最多为 19200000000。我不知道每次写入文件然后从中读取是否是最好的选择。编写差分进化算法的全部目的是让事情变得更快。我宁愿不必在每次迭代中读写文件
-
这篇关于命名管道的文章很有意思networkworld.com/article/3251853/linux/…(说的一切都是在内存上进行的。但不知海量的系统调用后台是没问题还是有什么实际问题... )