如何通过Python执行带输入文件重定向的Fortran代码Unix命令
实现方案
直接使用Python标准库subprocess即可实现需求,无需安装第三方依赖,也不需要使用F2PY做代码适配,完全保留原Fortran程序的运行逻辑(包括它自主写输出文件的行为),有两种常用写法:
写法1:无shell开销的安全写法(推荐)
直接将打开的输入文件作为子进程的标准输入传入,和shell重定向< file的行为完全一致,不需要启动额外shell进程,没有命令注入风险:
import subprocess # 打开输入文件,绑定到Fortran程序的标准输入 with open("file", "rb") as f: subprocess.run( ["./code"], stdin=f, check=True )
参数说明:
["./code"]:以列表形式传递可执行文件路径,避免shell解析的特殊字符转义问题stdin=f:将打开的文件句柄绑定到子进程的标准输入流,等价于shell的<重定向check=True:子进程返回非0退出码时主动抛出CalledProcessError,不需要的话可以移除
运行完成后,原Fortran程序生成的所有输出文件会和直接在命令行执行./code < file时完全一致,你原有读取输出文件的代码不需要做任何修改。
写法2:直接复用shell重定向语法(最简洁)
如果想要完全照搬原命令写法,可以开启shell=True让系统shell直接解析整条命令,代码最短:
import subprocess subprocess.run("./code < file", shell=True, check=True)
注意:如果
file的文件名是动态拼接的变量,不建议用这个写法,避免命令注入风险;如果命令是固定写死的,该写法完全可用。
内容的提问来源于stack exchange,提问作者BitterDecoction
相关产品推荐
相关产品推荐

