Выполнить командную строку и вернуть вывод команды - PullRequest
9 голосов
/ 20 октября 2011

В настоящее время я использую вызовы командной строки оболочки из моей программы на языке Fortran, используя нестандартную встроенную процедуру SYSTEM (аналогичную встроенной в Fortran 2008 EXECUTE_COMMAND_LINE):

CALL SYSTEM(commandStr)

где commandStr - строка символов, содержащая оболочкуКоманда, которую я хочу выполнить.На данный момент я не знаю о прямом способе возврата вывода commandStr, а только о его состоянии возврата.Итак, что я сейчас делаю - это записываю вывод в файл, а затем читаю файл из программы Fortran.Пример:

CALL SYSTEM('sed ''s/,//g'' myFile > dummyFile')

, если я хочу удалить запятые из myFile.Затем я использую OPEN и READ, чтобы получить содержимое dummyFile.

Это прекрасно работает, однако я обеспокоен записью / чтением файлов с диска, особенно если я делал это в длинном цикле и если вывод commandStrбыл большой.Есть ли способ перенаправить вывод commandStr в буфер памяти (не на жесткий диск), к которому я мог бы получить доступ непосредственно из моей программы на Фортране (возможно, через определенный номер UNIT)?

1 Ответ

1 голос
/ 20 октября 2011

Если это в среде POSIX, библиотечная функция popen() также может быть доступна.

iunit = popen ('sed ''s/,//g'' myFile', 'r')

Посмотрите документацию для вашей среды Fortran, так как я не уверен в семантике для подключенияввод / вывод в Фортран.Если это похоже на библиотеку времени выполнения C, для подключения к файлу также требуется специальная функция, чтобы закрыть его: pclose().

...