Shiro Kawai
shiro****@lava*****
2004年 10月 6日 (水) 15:09:02 JST
I/Oがバッファリングされているせいだと思います。 (display "123456\n" oport) の後に(flush oport)とするか、 oport作成時に (open-output-fd-port fd :buffering :line)と すれば動作します。 Expectみたいのは私も欲しくて、ptyインタフェースをつけたのも そのためなんですが、まだ手をつけられていません。 --shiro From: Osamu NAKAMURA <naka****@hasak*****> Subject: [Gauche-devel-jp] sys-forkpty (?)の使い方 Date: Wed, 06 Oct 2004 12:55:51 +0900 > 中村といいます。 > > Expect(*) みたいなことをしたくて、pexpect(**)をまねて、 > まずは、 > > #!/usr/bin/env gosh > (use gauche.process) > (use gauche.termios) > > (let* ((cmd "cat") > (args (list cmd))) > (receive > (pid fd) (sys-forkpty) > (if (= pid 0) ;; child > (sys-exec cmd args '((0 . 0) (1 . 1) (2 . 2))) > ) > ;; > ;; parent > (let ((oport (open-output-fd-port fd)) > (iport (open-input-fd-port fd))) > (display "123456\n" oport) > (print (read-block 5 iport)) > ) > ) > ) > > としてみたのですが、child の 標準入力への書き込み > (display "123456\n" oport) > ができておらず、 > (print (read-block 5 iport)) > で、止まってしまいます。(***) > > どこがおかしいのか、コメントいただけませんか? > ($ gosh -V > Gauche scheme interpreter, version 0.8.1 [euc-jp]) > > > (*)Expect > "Expect is a tool for automating interactive applications > such as telnet, ,," > http://expect.nist.gov/ > > (**)pexpect > Python による expect の実装。 > http://pexpect.sourceforge.net/ > > scsh や guile には expect.scm があるようでしたが、 > 修行がたらず、python の方がまだ読みやすく、、^^;;; > > (***) > ちなみに、python では、 > #!/usr/bin/env python > # -*- encodings: japanese.euc_jp -*- > import os, pty > > command="cat" > args=[command] > pid, child_fd = pty.fork() > > if pid == 0: os.execvp(command, args) > > os.write(child_fd, "123456\n") > s = os.read(child_fd, 100) > > print s > で、動いたりしてます。 > > -- > _______________________________________________ > Gauche-devel-jp mailing list > Gauch****@lists***** > http://lists.sourceforge.jp/mailman/listinfo/gauche-devel-jp >