Если вы предусмотрительно, чтобы написать все ваши write
заявления по линиям
write(write_unit,*) stuff_to_write
это было бы очень просто, вы можете просто прикрепить write_unit
к файлу вместо stdout
. Наверное, вы уже это знали, или вы не задали бы вопрос. Если write
утверждения формы
write(*,*)
или
print *
, то вы, вероятно, может перенаправить вывод с небольшой помощью вашего компилятора. Например, Intel Fortran отправляет выходные данные на адрес *
на консоль, если только программа не обнаруживает себя в среде с переменной FOR_PRINT
, установленной на имя какого-либо файла или другого файла, и в этом случае write(*,*)
будет записывать в этот файл. Я ожидаю, что другие компиляторы имеют схожие возможности.
Если ваш код использует
write(6,*)
на предположении, что блок 6 очков в stdout
вы можете открыть блок 6 на файл
open(unit = 6, file = 'stdout_redirect', status = 'new')
Для больше вы бы лучше сказать нам, что ваш записи выглядят как и какой компилятор вы используете.
EDIT
после редактирования OP на вопрос. Это скорее комментарий, чем ответ, но я довольно длинный ...
К сожалению, с точки зрения переносимости большая часть взаимодействия программы Fortran с базовой компьютерной системой не определена в стандартах , Ваш вопрос о том, где идет вывод, отправленный в блок *
go, является примером; в последнем (2008 г.) стандарте говорится, что он должен перейти в тот же блок, который идентифицируется с помощью именованной константы output_unit
из внутреннего модуля iso_fortran_env
. Но он не говорит, что он идет до stdout
(было много реализаций Fortran в системах без stdout
), и он не указывает, как перенаправить этот вывод, или даже если это возможно. Перенаправление вывода - это вопрос для платформы, а не Fortran.Как мы обнаружили, Intel Fortran может использовать переменную окружения для перенаправления вывода, видимо, Cray Fortran не может.
Последний стандарт полностью умалчивает о дескрипторах файлов, я не уверен, что это концепция, известная Fortran.
Использование *
для ввода/вывода в основном говорит о том, что это зависит от системы компилятора/времени выполнения, откуда поступает вход и выход. Если вам нужна переносимость, вам нужно взять управление и использовать определенную идентификацию устройства. Лично я думаю, что вы должны принять совет @ george в комментарии ниже.
Что касается вопроса, который вы добавили - что вы узнали, когда попробовали это? –
Хорошо, что я выяснил, совершенно не имеет значения, так как мне нужна переносимость, а переносимость обеспечивается стандартами. Мне, вероятно, нужно знать, как обрабатываются дескрипторы файлов в соответствии со стандартом Fortan, но я не уверен, какие последствия могут быть. Однако вы заслуживаете ответа ... Да, это сработало. Все последующие выходные данные были перенаправлены в файл, как и ожидалось. – Spiros