1

私は Python スクリプトを使用して、学生向けの Fortran コードをコンパイルして実行しています。これは、私が指定した入力規則に従っている限り、うまく機能します。これは私にとってうまくいくもののサンプルです:

child = pexpect.spawn(os.path.join(os.path.dirname(file),name))
child.expect('')
child.sendline(input)
child.expect(pexpect.EOF)
self.r_output.append(child.before)
child.close()

私の入力規則に従っていない場合、expect コマンドは機能しません。このため、 を使用しchild.interact()ます。しかし、ファイルが最終的に終了するたびに、次のようになります。

Traceback (most recent call last):
  File "./project.py", line 263, in <module>
    main()
  File "./project.py", line 45, in main
    stud.tohtml(f)
  File "./project.py", line 173, in tohtml
    self.run("<br/>")
  File "./project.py", line 140, in run
    child.interact(chr(27))
  File "/usr/lib/python2.7/dist-packages/pexpect.py", line 1492, in interact
    self.__interact_copy(escape_character, input_filter, output_filter)
  File "/usr/lib/python2.7/dist-packages/pexpect.py", line 1520, in __interact_copy
    data = self.__interact_read(self.child_fd)
  File "/usr/lib/python2.7/dist-packages/pexpect.py", line 1510, in __interact_read
    return os.read(fd, 1000)
OSError: [Errno 5] Input/output error

終了する前に ascii 29 を押すのに十分な速度があれば、すべてがうまくいきます。何が間違っている可能性がありますか?この問題を解決するにはどうすればよいですか?

4

1 に答える 1

1

それはおそらく、子供が退出したことを意味します。呼び出しを try/except でラップし、確認 child.isalive()することができます。

于 2012-11-09T08:44:43.490 に答える