目前有个需求,即由python的subprocess模块调用fortran语言编译的二进制执行文件;
其中fortran文件需要读取来自屏幕的输入信息,一直苦寻方法而不得其门,终于在搜索引擎的帮助下,找到了这个答案,解决了我所有的问题.
假如fortran文件如下:
program main
character(80) :: param1, param2
write(*,*) 'Now read the first parameters!'
read(*, '(a)') param1
write(*,*) 'Now read the second parameters!'
read(*, '(a)') param1
...
下面是各种操作
...
# 同时假设我们利用gfortran将程序编译为foo
那么对需要两个参数的执行文件,无法在跟在命令后面直接输入参数,需要使用标准输入与子进程通信进行传递。
# 参考答案中内容
import subprocess
proc = subprocess.Popen([exec_dir], stdout=subprocess.PIPE, stdin=subprocess.PIPE,
stderr=subprocess.STDOUT)
param1 = 'apwieurpqwuier wer '
param2 = 'awe;foui awef; '
input_cmd = f'{param1}\n{param2)\n'
pout = proc.communicate(input=input_cmd.encode('utf8'))
# 好了, 现在我们已经向子进程传递了需要的参数
# pout的就是子进程执行完毕的输出结果