Windows下Python脚本批量编译运行Fortran程序报错求助
Windows下批量编译运行Fortran程序的Python脚本修复方案
核心问题梳理
Windows的命令行逻辑和Linux shell存在差异:直接用cd xxx && .\a.exe这类写法时,若未用cmd /c包裹命令链或未正确配置subprocess参数,会触发命令识别错误;同时相对路径处理不当会导致找不到源文件。
修复方案与示例代码
直接通过cmd /c封装完整命令链,配合绝对路径处理,可避免路径切换和命令识别问题:
import subprocess import os def batch_compile_run_fortran(root_dir): # 遍历目标目录下所有Fortran源文件,可根据实际后缀调整 for dirpath, _, filenames in os.walk(root_dir): for filename in filenames: if filename.endswith(('.f90', '.f', '.for')): # 生成源文件与可执行文件的绝对路径 src_abs_path = os.path.abspath(os.path.join(dirpath, filename)) exe_name = os.path.splitext(filename)[0] + '.exe' exe_abs_path = os.path.join(dirpath, exe_name) # 拼接编译、运行命令(以gfortran为例,可替换为ifort等编译器) compile_cmd = f'gfortran "{src_abs_path}" -o "{exe_abs_path}"' run_cmd = f'"{exe_abs_path}"' # 用cmd /c包裹完整流程,/d参数确保跨盘符切换目录 full_cmd = f'cmd /c cd /d "{dirpath}" && {compile_cmd} && {run_cmd}' try: # 执行命令并捕获输出 result = subprocess.run(full_cmd, check=True, capture_output=True, text=True) print(f"✅ 处理{filename}成功:") print("输出:", result.stdout) except subprocess.CalledProcessError as e: print(f"❌ 处理{filename}失败:") print("错误信息:", e.stderr) # 替换为你的Fortran文件根目录 batch_compile_run_fortran(r"C:\Your\Fortran\Project\Dir")
关键注意事项
- 所有路径用双引号包裹,避免路径含空格时命令解析出错
- 用
cmd /c cd /d替代单纯cd,确保跨盘符目录切换生效 - 无需调用
os.chdir,避免进程全局路径变更影响后续文件处理 - 确保编译器(如gfortran、ifort)已加入系统环境变量,或直接写入编译器绝对路径(如
"C:\Program Files\GFortran\bin\gfortran.exe")
内容的提问来源于stack exchange,提问作者Janderson
相关产品推荐
相关产品推荐

