モジュールからPIPEを介して配列をFORTRANにsubprocess
渡すには、コマンドライン引数としてこの配列をFORTRANに渡す方法を理解する必要があります。これは、PIPEがシェルのようなインターフェイス(または必要に応じて実際のシェル)を使用してプログラムを呼び出すためです。あなたのアプローチを使用するために、私は次のようなPythonリストを作成します。
arguments = [rows, columns] + [x for x in Raster_Z.flatten()]
numpyを使用していると仮定しました。このリストは、STDINにパイプすることができます。このように、メモリを割り当てることができるように配列の行と列の数をFORTRANに指示すると、フラット化された配列が読み込まれ、適切と思われる形に変更できます。配列をフラット化すると、配列の行順から列順のストレージへの厄介な変換を削除できるという追加の利点があります。
私は実際に、PIPEを使用して、あなたが探していることを正確に実行しました。ただし、STDINを介して配列をFORTRANルーチンにパイプする代わりに、一時ファイルに書き込み、ファイルを介してFORTRANから読み込みました。私は当初、上記で提案したことを実行しようとしましたが、FORTRANがSTDINから大量のデータセットを読み取る際に問題が発生しました...これはバッファリングに起因すると考えられます。あなたのマイレージは変わるかもしれません、そして、STDINはあなたのために働くかもしれません。
また:
f2pyを使用してFORTRANルーチンをラップし、Python関数であるかのように配列をFORTRANに直接送信できます。PIPEは必要ありません!。