1

foil2w.exe 翼型から空力計算を行うexe 呼び出しを実行する Windows 用のコードを作成する必要があります。これには、多くの変数をexe含む入力テキスト ファイル ( ) があります。dfile_bl次に、実行するたびにそれを開いて、値 (迎角) を 0 から 16 に変更し、再度実行する必要があります。aerola.datまた、結果を含む最後の行を保存する必要がある場所と呼ばれる出力ファイルを生成します。私がやろうとしているのは、プロセスを自動化し、プログラムを実行し、結果を保存して角度を変更し、再度実行することです。私はLinuxでそれを行い、sedコマンドを使用して線を見つけて角度に置き換えました。今、私は窓のためにそれをしなければなりません、そして私はどのように始めるべきか分かりません。Linux用に作成したコードは正常に動作します:

import subprocess
import os

input_file = 'dfile_bl'
output_file = 'aerloa.dat'
results_file = 'results.txt'

try:
    os.remove(output_file)
    os.remove(results_file)
except OSError:
    pass

for i in [0, 2, 4, 6, 8, 10, 12, 14, 16]:
    subprocess.call('./exe', shell=True)
    f = open(output_file, 'r').readlines()[-1]
    r = open(results_file, 'a')
    r.write(f)
    r.close()
    subprocess.call('sed -i "s/%s.00       ! ANGL/%s.00       ! ANGL/g" %s' % (i, i+2, input_file), shell=True)

subprocess.call('sed -i "s/18.00       ! ANGL/0.00       ! ANGL/g" %s' % input_file, shell=True)   

dfile は次のようになります。

3.0          ! IFOIL
n2412aN    
0.00       ! ANGL
1.0        ! UINF 
300        ! NTIMEM

編集:今はうまくいっています

import subprocess
import os
import platform

input_file = 'dfile_bl'
output_file = 'aerloa.dat'
results_file = 'results.txt'
OS = platform.system()
if OS == 'Windows':
    exe = 'foil2w.exe'
elif OS == 'Linux':
    exe = './exe'

try:
    os.remove(output_file)
    os.remove(results_file)
except OSError:
    pass

for i in [0, 2, 4, 6, 8, 10, 12, 14, 16]:
    subprocess.call(exe, shell=OS == 'Linux')
    f = open(output_file, 'r').readlines()[-1]
    r = open(results_file, 'a')
    r.write(f)
    r.close()
    s = open(input_file).read()
    s = s.replace('%s.00       ! ANGL' % str(i), '%s.00       ! ANGL' % str(i+2))
    s2 = open(input_file, 'w')
    s2.write(s)
    s2.close()
# Volver el angulo de dfile_bl a 0
s = open(input_file).read()
s = s.replace('%s.00       ! ANGL' % str(i+2), '0.00       ! ANGL')
s2 = open(input_file, 'w')
s2.write(s)
s2.close()
b
4

1 に答える 1

0

交換できませんでしたか

subprocess.call('sed -i "s/%s.00       ! ANGL/%s.00       ! ANGL/g" %s' % (i, i+2, input_file), shell=True)

のようなもので、

with open('input_file', 'r') as input_file_o:
    for line in input_file_o.readlines():
        outputline = line.replace('%s.00       ! ANGL' % i, '%s.00       ! ANGL' % i+2)

[1] http://docs.python.org/2/library/stdtypes.html#str.replace

于 2013-02-16T20:20:04.447 に答える