我需要为 Windows 编写代码,该代码将运行一个 exe 调用foil2w.exe
,该调用从翼型进行一些空气动力学计算。这有一个包含很多变量exe
的输入文本文件 ( )。dfile_bl
然后每次运行后,我必须打开它,将一个值(攻角)从 0 更改为 16,然后再次运行。还会生成一个名为的输出文件aerola.dat
,我必须在其中保存最后一行,这是具有结果的那一行。我正在尝试做的是自动化该过程,运行程序,保存结果更改角度并再次运行它。我已经为 Linux 完成了它,并使用该sed
命令来查找并用角度替换线。现在我必须为 Windows 做这件事,我不知道如何开始。我为 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