File io 一行打印和书写?

File io 一行打印和书写?,file-io,fortran,File Io,Fortran,有没有可能在屏幕上打印一些东西,同时打印的内容也被写入文件? 现在,我有这样的想法: print *, root1, root2 open(unit=10,file='result.txt' write(10,*), root1, root2 close(10) $ ./my_program | tee result.txt 我觉得我是在浪费台词,让代码变得更长。实际上,我想打印/写入比这些行多得多的行,所以我正在寻找一种更干净的方法。写入标准输出和写入文件是两件不同的事情,所以您总是需要单

有没有可能在屏幕上打印一些东西,同时打印的内容也被写入文件? 现在,我有这样的想法:

print *, root1, root2
open(unit=10,file='result.txt'
write(10,*), root1, root2
close(10)
$ ./my_program | tee result.txt

我觉得我是在浪费台词,让代码变得更长。实际上,我想打印/写入比这些行多得多的行,所以我正在寻找一种更干净的方法。写入标准输出和写入文件是两件不同的事情,所以您总是需要单独的说明。但是您不必为每一行都打开和关闭文件

老实说,我不认为这是一个更大的努力:

open(unit=10, file='result.txt', status='replace', form='formatted')
....
write( *, *) "Here comes the data"
write(10, *) "Here comes the data"
....
write( *, *) root1, root2
write(10, *) root1, root2
....
close(10)
这只比每个write语句必须执行的操作多出一行。 如果您真的认为您的代码中有太多的write语句,以下是一些您可以尝试的想法:

如果您在Linux或Unix系统(包括MacOS)上运行,则可以编写一个只写入standard out的程序,并将输出通过管道传输到文件中,如下所示:

print *, root1, root2
open(unit=10,file='result.txt'
write(10,*), root1, root2
close(10)
$ ./my_program | tee result.txt
这会将数据输出到屏幕,并将其写入文件
result.txt

或者,您可以将输出写入程序中的文件,并在外部“跟踪”该文件:

$ ./my_program &
$ tail -f result.txt
我有另一个想法:如果您确实经常遇到需要将数据写入屏幕和文件的问题,您可以将其放入子例程:

program my_program
    implicit none
    real :: root1, root2, root3
    ....
    open(10, 'result.txt', status='replace', form='formatted')
    ....
    call write_output((/ root1, root2 /))
    ....
    call write_output((/ root1, root2, root3 /))
    ....
    call write_output((/ root1, root2 /))
    ....
    close(10)
    ....
contains
    subroutine write_output(a)
        real, dimension(:), intent(in) :: a
        write( *, *) a
        write(10, *) a
    end subroutine write_output
end program my_program
我将要在这里写入的值作为数组传递,因为这样可以在可能要打印的变量数量上提供更大的灵活性。另一方面,您只能使用此子例程来写入
实数
值,对于其他(
整型
字符
等)或其组合,您仍然需要有两个
写入
语句,或写入其他特定的“写入两个”例程