Python子流程允许用户交互

时间:2012-07-24 17:10:50

标签: python fortran subprocess

我试图从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

此代码暂停并允许用户根据提示输入某些信息。我想通过使用子进程Popen命令来获得类似的功能。脚本在运行之前不知道输入是什么,或者甚至是否需要发生。

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

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

有没有办法允许脚本运行器在程序运行时在终端中输入数据?

1 个答案:

答案 0 :(得分:3)

您似乎想要使用pexpect

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')

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