Сохранить вывод командной строки в переменную в Fortran - PullRequest
0 голосов
/ 23 ноября 2018

Есть ли способ сохранить выходные данные утилиты командной строки для переменной в Fortran?

У меня есть утилита на основе BASH, которая дает мне число, которое необходимо использовать в программе на Фортране.Я хочу вызвать утилиту через саму программу и, если возможно, избежать записи в файл.

Может быть, что-то вроде этого?

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

Или, может быть, так?

read(call execute_command_line('echo 5'),*) a

Я не думаю, что все это правильно.Я хотел бы знать, есть ли на самом деле метод для этого.Я прочитал документы для execute_command_line, но я не думаю, что есть выходной аргумент для подпрограммы, которая делает это.

1 Ответ

0 голосов
/ 23 ноября 2018

Поскольку вы используете 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 может быть немного хитрой (поэтому после команды echo стоит знак '&', вы можете немного ее прочитать и поэкспериментировать(в частности, убедитесь, что у вас нет процессов zillion bash, когда вы делаете это несколько раз).

...