1

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

このコードは一時停止し、ユーザーがプロンプトに基づいて特定の情報を入力できるようにします。サブプロセス Popen コマンドを使用して、同様の機能が欲しいです。スクリプトは、実行前に入力が何であるか、または発生する必要があるかどうかさえ知りません。

現在、必要な入力のないプログラムの場合、次のスクリプトが機能します。

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

プログラムの実行中にスクリプト ランナーがターミナルにデータを入力できるようにする方法はありますか?

4

1 に答える 1

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

于 2012-07-24T17:18:50.473 に答える