ファイルを入力として取り込み、出力をstdout
に書き込むFortranコードがあります。読み取り/書き込みサイクルを避けるために、Pythonの内部でコードを実行し、出力をnumpy
配列に変換したいと思います。私は次の関数を使用してこれを行うことができます:処理後に外部プログラムから出力を戻す
私は配列をとり、変更してファイルに書き出します。新しいファイルは再びrun_fortran(infile)
に渡されます。この手順を回避して、ファイル名を渡す代わりにrun_fortran
の出力を使用することはできますか?
ノー成功2つのケースを試みた:
(1)文字列への変換:
arr = run_fortran('input.txt')
new_arr = str(arr).replace("[","").replace("]","")
run_fortran(new_arr)
これは空の配列を返します。 StringIO
を使用してファイルタイプのオブジェクトに変換
(2):TypeError: execv() arg 2 must contain only strings
理にかなって:
from cStringIO import StringIO
run_fortran(StringIO(new_arr))
これはエラーを返します。
FYI、あなたの代わりに '' Popen' + communicate'の 'check_output'を使用することができます。 –
あなたのfortranプログラムはファイル名を期待しているので、他のものとはうまく動作しません。コマンドライン(またはkeyboard-stdin)からのデータを扱うFortranプログラムを変更すると、ファイルに保存せずにそのまま使用することができます。 – furas
@furas:それは意味がある、ありがとう。私はFortranでそれを行う方法を理解する必要があります! – Mahdi