Karthik Gurusamy escribió: > On Mar 13, 6:39 pm, Roman Medina-Heigl Hernandez <ro...@rs-labs.com> > wrote: >> Hi, >> >> I'm experimenting with Python and I need a little help with this. What I'd >> like is to launch an interactive shell, having the chance to send first >> several commands from python. I've written the following code: >> >> ============= >> >> #!/usr/bin/env python >> >> import sys, subprocess >> >> exe = "/bin/sh" >> params = "-i" > > -i says shell to be interactive. So looks like it is directly trying > to read from the terminal.
Well, then the question will be: is there any way to tell python to directly "map" the terminal to the subprocess? >> proc = subprocess.Popen([exe, params], stdin=subprocess.PIPE) > > proc = subprocess.Popen([exe,], stdin=subprocess.PIPE) > > works for me; but if there is an error 'sh' terminates. > > If you want to simulate interactive, explore the pexpect module. I'll get it a try :))) >> proc.stdin.write("id\n") >> >> while True: >> line = sys.stdin.readline() >> if not line: > > note that a simple enter terminates the shell which you may not want. Test my code and you'll see that this is not true :) When you hit enter line will contain '\n' so it's not empty. >> break >> proc.stdin.write(line) Btw, another curiosity I have: is it possible to make a print not automatically add \n (which is the normal case) neither " " (which happens when you add a "," to the print sentence)? I found an alternative not using print at all, eg: sys.stdout.write("KKKKK"). But it resulted strange to me having to do that trick :) Thank you for all your comments and comprenhension. -r >> sys.exit() >> >> ============= >> >> The problem is that when I launch it, python proggy is automatically >> suspended. The output I got is: >> >> ro...@rslabs:~/pruebas$ ./shell.py >> ro...@rslabs:~/pruebas$ uid=1000(roman) gid=1000(roman) groups=1000(roman) >> ro...@rslabs:~/pruebas$ >> >> [2]+ Stopped ./shell.py >> ro...@rslabs:~/pruebas$ >> >> Why and how to fix it? Would you suggest a better and more elegant way to >> do what I want? > > As I see it, 'sh' is attempting to read from the keyboard and not from > stdin. > > Karthik > >> Thank you. >> >> -- >> >> Saludos, >> -Roman >> >> PGP Fingerprint: >> 09BB EFCD 21ED 4E79 25FB 29E1 E47F 8A7D EAD5 6742 >> [Key ID: 0xEAD56742. Available at KeyServ] > > -- > http://mail.python.org/mailman/listinfo/python-list -- Saludos, -Roman PGP Fingerprint: 09BB EFCD 21ED 4E79 25FB 29E1 E47F 8A7D EAD5 6742 [Key ID: 0xEAD56742. Available at KeyServ] -- http://mail.python.org/mailman/listinfo/python-list