From mboxrd@z Thu Jan 1 00:00:00 1970 Path: main.gmane.org!not-for-mail From: "Tennis Smith" Newsgroups: gmane.emacs.help Subject: Help - Tcl/Expect Parsing Strangeness In Emacs Shell Date: Mon, 16 Aug 2004 16:00:53 -0700 Organization: self Sender: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Message-ID: <1092697387.756306@sj-nntpcache-3> NNTP-Posting-Host: deer.gmane.org X-Trace: sea.gmane.org 1092697299 23396 80.91.224.253 (16 Aug 2004 23:01:39 GMT) X-Complaints-To: usenet@sea.gmane.org NNTP-Posting-Date: Mon, 16 Aug 2004 23:01:39 +0000 (UTC) Original-X-From: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Tue Aug 17 01:01:29 2004 Return-path: Original-Received: from lists.gnu.org ([199.232.76.165]) by deer.gmane.org with esmtp (Exim 3.35 #1 (Debian)) id 1BwqTp-0001yF-00 for ; Tue, 17 Aug 2004 01:01:29 +0200 Original-Received: from localhost ([127.0.0.1] helo=lists.gnu.org) by lists.gnu.org with esmtp (Exim 4.33) id 1BwqXw-0004qI-Rw for geh-help-gnu-emacs@m.gmane.org; Mon, 16 Aug 2004 19:05:44 -0400 Original-Path: shelby.stanford.edu!newsfeed.stanford.edu!news-spur1.maxwell.syr.edu!news.maxwell.syr.edu!news.glorb.com!sn-xit-02!sn-xit-04!sn-xit-01!sn-post-01!supernews.com!corp.supernews.com!not-for-mail Original-Newsgroups: comp.emacs,comp.lang.tcl,gnu.emacs.help X-Priority: 3 X-MSMail-Priority: Normal X-Newsreader: Microsoft Outlook Express 5.50.4922.1500 X-MimeOLE: Produced By Microsoft MimeOLE V5.50.4939.300 Cache-Post-Path: sj-nntpcache-3!unknown@sjc-vpn3-827.cisco.com X-Cache: nntpcache 2.4.0b2 (see http://www.nntpcache.org/) Original-X-Complaints-To: abuse@supernews.com Original-Lines: 121 Original-Xref: shelby.stanford.edu comp.emacs:85830 comp.lang.tcl:254473 gnu.emacs.help:124799 Original-To: help-gnu-emacs@gnu.org X-BeenThere: help-gnu-emacs@gnu.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: Users list for the GNU Emacs text editor List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: help-gnu-emacs-bounces+geh-help-gnu-emacs=m.gmane.org@gnu.org Xref: main.gmane.org gmane.emacs.help:20146 X-Report-Spam: http://spam.gmane.org/gmane.emacs.help:20146 Hi, Apologies for the wide distribution. This is in one of those grey areas between tools so I'm not sure where it fits. I tried posting this once before with a "tar" file containing my test scripts, but the mailer barfed back at me. The problem is that in certain circumstances, Tcl/Expect doesn't work correctly while in an Emacs shell. Application output that Expect is "expecting" will not be detected. I ran into this while trying to parse the output of a telnet session to an MS Windows machine. Initially, I thought it was something wrong with the Windows output (or with your humble programmer ;-)). But after much debugging, I've narrowed it down to two salient facts: 1 - Everything works correctly on rxvt, xterm and Emacs version 20.7.1 and earlier. 2 - The only environment that consistently has this occur is Emacs versions 21.2.95.2 and later. Steps To Recreate: Below are two tiny scripts. The "test.exp" script spawns a task. The "datagen.tcl" script is called in the spawned task and simply writes to the screen. The "test.exp" then reads output from "datagen.tcl" Run the "test.exp" script with the "datagen.tcl" script in the same directory. When everything is working _correctly_, you'll see two copies of command output from "datagen.tcl", one from stdout and one printed from expect itself. If run under an xterm, expect will be able to detect output and put it into the "accum" variable (which is then printed). But, if run in a shell under Emacs, expect will not detect the data and will put only blank lines into the "accum" variable. Has anyone else seen this or know how to fix it? TIA, -Tennis #!/bin/sh # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x set starter { ${1:+"$@"} shift shift exec expect -f $0 -- ${1:+"$@"} } # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x # # Ive tried this test under tcsh and bash. Both have the same # result. # puts ">>>>>>>>BEGIN VERSION INFO<<<<<<<<<<\ \nTCL VERSION:\ntcl version [info tclversion]\n\ \nEXPECT VERSION:\n[exec expect -v]\n\ \nBASH Version:\n[exec bash --version]\n\ \nTCSH Version:\n [exec tcsh --version]\n\ \n>>>>>>>END VERSION INFO<<<<<<<<<<<<<<\n\n" spawn bash exp_send "./datagen.tcl\n" set accum {} expect { -re " " { set accum "${accum}$expect_out(buffer)" exp_continue } timeout { if {![string length $expect_out(buffer)]} { set accum "timed out waiting for data" } else { set accum "${accum}\n\nFinal timeout\n" } } } puts "accum:$accum" # End of test.exp #!/bin/sh # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x set starter { ${1:+"$@"} shift shift exec expect -f $0 -- ${1:+"$@"} } # xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx x puts "ipconfig\ \n\nWindows 2000 IP Configuration\ \n\nEthernet adapter 126 Network:\ \n\n Connection-specific DNS Suffix . : \ \n IP Address. . . . . . . . . . . . : 0.0.0.0\ \n Subnet Mask . . . . . . . . . . . : 0.0.0.0\ \n Default Gateway . . . . . . . . . : \ \n\nEthernet adapter 172 Network:\ \n\n Connection-specific DNS Suffix . : \ \n IP Address. . . . . . . . . . . . : 172.19.178.242\ \n Subnet Mask . . . . . . . . . . . : 255.255.255.0\ \n Default Gateway . . . . . . . . . : 172.19.178.1" # End of datagen.tcl -- Remove "-remove-to-reply" to respond to my email address directly.