从Perl调用Fortran程序而不保存输入/输出文件

时间:2012-06-13 17:56:17

标签: perl fortran

我正在使用Perl程序将用户输入正确格式化为Fortran程序的输入文件。 Fortran程序创建输出文件和错误文件。 Fortran程序从Perl调用,如:

system "/mydirectories/fortranexecutable $inputfile $outputfile $errorfile";

我想知道是否有办法调用Fortran可执行文件而不实际创建输入/输出/错误文件并在调用Fortran程序之前/之后将它们保存到磁盘?我希望我的问题很清楚,而不是太明显。我是Perl的新手,我试着到处寻找这个。感谢您的帮助。

2 个答案:

答案 0 :(得分:5)

如果Fortran代码顺序读取并按顺序写入现有文件,但您希望通过Perl代码“实时”与它进行通信,那么您可以使用named pipes来解决问题。它们仍然作为文件系统中的条目存在,并且可以通过Fortran代码按照通常的文件打开,只要它们的名称,但是从它们读取/写入它们就像管道一样。

在Perl中你会做这样的事情(公然从this answer复制):

use File::Temp qw(tempdir);
use File::Spec::Functions qw(catfile);
use POSIX qw(mkfifo);

my $dir = tempdir(CLEANUP=>1);
my $inputfifo = catfile($dir, "input");
mkfifo($inputfifo, 0700) or die "mkfifo($inputfifo) failed: $!";
my $outputfifo = catfile($dir, "output");
mkfifo($outputfifo, 0700) or die "mkfifo(output$fifo) failed: $!";
my $errorfifo = catfile($dir, "error");
mkfifo($errorfifo, 0700) or die "mkfifo($errorfifo) failed: $!";

... open the FIFOs ...

system "/mydirectories/fortranexecutable $inputfifo $outputfifo $errorfifo";

... operate with the FIFOs to communicate with the Fortran code ...

... close FIFOs and remove $dir when finished ...

答案 1 :(得分:3)

没有。如果Fortran程序以这样的方式编写,它将$inputfile作为命令行参数,从中读取数据,并输出$outputfile$errorfile作为结果,这是唯一的方法是通过一个文件。

如果您希望通过标准输入将输入数据传递给Fortran可执行文件,则必须修改Fortran源代码以适应此类输入。