Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python子流程允许用户交互_Python_Fortran_Subprocess - Fatal编程技术网

Python子流程允许用户交互

Python子流程允许用户交互,python,fortran,subprocess,Python,Fortran,Subprocess,我正在尝试从python脚本运行一些学生FORTRAN程序。这些程序不是按任何特定顺序编写的,通常依赖于简单的FORTRANread(*,*)命令。一个简单的程序可以是: program main implicit none real :: p,t write(*,*)'Enter p' read(*,*)p write(*,*)'Enter t' read(*,*)t write(*,*)p,t end program main 此代码

我正在尝试从python脚本运行一些学生FORTRAN程序。这些程序不是按任何特定顺序编写的,通常依赖于简单的FORTRAN
read(*,*)
命令。一个简单的程序可以是:

program main
    implicit none
    real :: p,t
    write(*,*)'Enter p'
    read(*,*)p
    write(*,*)'Enter t'
    read(*,*)t
    write(*,*)p,t
end program main
此代码暂停并允许用户根据提示输入某些信息。我希望通过使用subprocess Popen命令实现类似的功能。脚本在运行之前不知道输入是什么,或者是否需要输入

目前,对于没有必要输入的程序,以下脚本有效:

p = sub.Popen('./file',stdout=sub.PIPE,stderr=sub.PIPE,stdin=sub.PIPE,shell=True)
output,error = p.communicate()

程序运行时,是否有任何方法允许脚本运行程序在终端中输入数据?

看起来您要使用:


要将程序的交互控制传递给用户,请使用
child.interactive()

pexpect能否将输出“管道”回python程序?这会很有帮助。是的,您可以使用
output\u filter
回调参数来
interact()
logfile
属性。
import pexpect
child = pexpect.spawn('student_program')
while child.expect('Enter (\w+)\r\n', pexpect.EOF) == 0:
    if child.match[1] == 'p':
        child.sendline('3.14159')