2012-07-24 4 views
1

python 스크립트에서 여러 학생용 FORTRAN 프로그램을 실행하려고합니다. 이러한 프로그램은 특정 순서로 작성되지 않으며 종종 FORTRAN read(*,*) 명령에 의존합니다. 간단한 프로그램은 다음과 같습니다 :Python 하위 프로세스가 사용자 상호 작용을 허용합니다.

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

프로그램이 실행되는대로 스크립트 주자가 터미널에 데이터를 입력 할 수 있도록 어떤 방법이 있나요? 당신이 pexpect를 사용하려면 같은

답변

3

같습니다 :

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()을 사용하여, 사용자에게 프로그램의 상호 작용 컨트롤을 전달합니다.

+0

출력을 파이썬 프로그램으로 "파이프"할 수 있습니까? 도움이 될 것입니다. –

+0

예,'interact()'또는'logfile' 속성에'output_filter' 콜백 인자를 사용할 수 있습니다. – ecatmur

관련 문제