Training, Open Source computer languages
PerlPHPPythonMySQLApache / TomcatTclRubyJavaC and C++LinuxCSS 
Search for:
Home Accessibility Courses Diary The Mouth Forum Resources Site Map About Us Contact
 
For 2023 (and 2024 ...) - we are now fully retired from IT training.
We have made many, many friends over 25 years of teaching about Python, Tcl, Perl, PHP, Lua, Java, C and C++ - and MySQL, Linux and Solaris/SunOS too. Our training notes are now very much out of date, but due to upward compatability most of our examples remain operational and even relevant ad you are welcome to make us if them "as seen" and at your own risk.

Lisa and I (Graham) now live in what was our training centre in Melksham - happy to meet with former delegates here - but do check ahead before coming round. We are far from inactive - rather, enjoying the times that we are retired but still healthy enough in mind and body to be active!

I am also active in many other area and still look after a lot of web sites - you can find an index ((here))
Expect question - send commands to an xterm shell

Posted by dvorak_user (dvorak_user), 4 February 2008
EDIT: I've found a better way to write my program, so this is no longer an issue for me. However, I would still like to know how to send commands to a shell in a separate xterm window. Much obliged!

---

Hello, all! Well, I barely squeezed that title in!

Right now, I'm trying to spawn a shell within an xterm window and then send it commands via Expect. I know how to spawn a shell and send commands through Expect normally, but for the program I'm writing, it would be extraordinarily useful to have information display in a separate window. The closest I've managed to get is with this snippet from Exploring Expect:

Code:
spawn -pty
stty raw -echo < $spawn_out(slave,name)
regexp ".*(.)(.)" $spawn_out(slave,name) dummy c1 c2
if {[string compare $c1 "/"] == 0} {
       set c1 "0"
}
set xterm_pid [exec xterm -S$c1$c2$spawn_out(slave,fd) &]
close -slave
expect "\n"
set xterm $spawn_id

spawn $env(SHELL)
set shell $spawn_id
interact -u $xterm


However, this code does not yield the desired effect; with this setup, I can only interact with the shell via user input, but I want to retain the ability to send commands directly from a program. Any I/O redirection I've tried has ended up with a nonfunctional program.

Again, my goal is to spawn a shell that displays in an xterm window and send commands - that will also display in the xterm - via another program.

Any help would be sincerely appreciated. Thank you!

edit: I'm not sure how clearly I stated what I'm trying to code, so I thought I'd be more explicit.

*A program should be able to send commands to the shell and expect things from the shell directly (or via xterm) and display the entire transaction in an xterm window.
*The user will occasionally have to interact with the shell - this should be done via the same xterm window.

Again, thanks for reading!

Posted by admin (Graham Ellis), 5 February 2008
Thank you for adding those extra bits on the end.  Can I ask a question wider still about the application - I'm not exactly sure that Expect is the way to go.  It rather looks to me as if you have a project / practical question to answer for an assignment under which a degree of interaction is needed, and I'm going to question the whole basis of your coice of Expect - I wonder if it's a needless level.  And I'm wondering what the setter of the task requires / intended, and whether he / she can provide further feedback.  

Posted by dvorak_user (dvorak_user), 5 February 2008
Thanks for your reply! I'll try to explain the situation as best as I can:

I used a shell as an example, but ideally this script is going to manage a telnet session. There will be four overall, and there needs to be communication among them; I figured that I'd just write one central program to manage four windows and the appropriate Expect commands. The telnet sessions are to separate related programs, and, ideally, Expect will handle a particularly monotonous daily test that needs to be done for some software.

A large degree of automation would significantly speed up the process, but some interaction is required - mainly to manually check configuration settings. Apart from that, user interaction is small. The choice of separate xterm windows (or xterm windows at all) is based on the fact that each telnet session will be displaying several large configuration files and statistics at once, and it would be useful for the user to be able to see all of it at once.

Upon more consideration, I could probably scrap the user interaction bit of the program, but it is still highly desirable to display the automation in an xterm window. The main issue I have is that this program needs to communicate to others, often waiting until one is done with a particular process.

I sincerely appreciate your time, and I'll do what I can to make a solution as easy-to-find as possible.

Posted by admin (Graham Ellis), 6 February 2008
From your ongoing description, I would be so tempted to use text areas in Tk - much more controllable and easier



This page is a thread posted to the opentalk forum at www.opentalk.org.uk and archived here for reference. To jump to the archive index please follow this link.

You can Add a comment or ranking to this page

© WELL HOUSE CONSULTANTS LTD., 2024: Well House Manor • 48 Spa Road • Melksham, Wiltshire • United Kingdom • SN12 7NY
PH: 01144 1225 708225 • FAX: 01144 1225 793803 • EMAIL: info@wellho.net • WEB: http://www.wellho.net • SKYPE: wellho