Buenas. Ahora ando intentandolo otra vez con popen, mas o menos no consigo leer pero me falla el envió de datos por stdin.
Saludos. El mar., 25 sept. 2018 a las 18:44, Chema Cortes (<pych...@gmail.com>) escribió: > > > El lun., 24 sept. 2018 a las 16:30, Miguel de Dios Matias (< > tres.14...@gmail.com>) escribió: > >> Buenas. >> >> Ando pegándome en intentar "encapsular" un ejecutable (un viejo >> roguelike) que saca la salida en ncurses y se interacciona con pulsaciones >> de teclado. >> >> Me he hecho un script sencillo en ncurses para probar (este espera la >> pulsación y muestra la tecla pulsada y si es q se sale). >> > > ¿Exactamente, qué esperabas que hiciera? Las entradas y salidas estándar > funcionan con buffers, no son adecuadas para programas interactivos. > > De alguna forma tendrás que exponer el interface curses de la aplicación > para que sea accesible por tu script de testing. > > >> >> ---- >> import sys,os >> import curses >> >> def draw_menu(stdscr): >> k = 0 >> while (k != ord('q')): >> stdscr.clear() >> height, width = stdscr.getmaxyx() >> stdscr.addstr(0, 0, "HOLA {}".format(k)) >> stdscr.refresh() >> >> k = stdscr.getch() >> >> def main(): >> curses.wrapper(draw_menu) >> >> if __name__ == "__main__": >> main() >> ---- >> >> Y he probado con popen, pexpect y me falta sacrificar una cabra...no lo >> saco, aquí mis intentos infructuosos: >> >> ---- >> >> """ >> ps -A | grep cata >> xdotool search --pid 3819 >> xdotool key --window 50331670 q >> """ >> >> """ >> from subprocess import Popen, PIPE >> >> #p = Popen('./test5.py', stdin=PIPE, stdout=PIPE, shell=True) >> #p = Popen('./test5.py', shell=True) >> p = Popen('./test2.py') >> >> print(p.pid) >> >> sleep(100) >> >> # p.stdin.close() >> # p.stdout.close() >> # p.wait() >> >> """ >> >> >> # ~ import pexpect >> >> # ~ child = pexpect.spawn("./test5.py") >> # ~ child.send('a') >> # ~ child.send('b') >> # ~ child.interact() >> >> >> # ~ import sys >> # ~ import pexpect >> # ~ child = pexpect.spawn('./test5.py', logfile=open("/tmp/file", "wb")) >> # ~ child.logfile = open("/tmp/file", "wb") >> # ~ child.expect(pexpect.EOF) >> # ~ child.send('a') >> # ~ child.send('q') >> # ~ child.interact() >> >> """ >> >> https://stackoverflow.com/questions/2575528/simulating-key-press-event-using-python-for-linux >> spawn >> fout = file('output.txt', 'w') child.logfile = fout >> """ >> >> import sys >> from time import sleep >> import pexpect >> child = pexpect.spawn('./test5.py') >> child.logfile = open("/tmp/file", "wb") >> sleep(2) >> child.send('a') >> print(child.read()) >> # ~ child.send('q') >> ---- >> >> Por si alguien le interesa el karma en stackoverflow, tengo la misma >> pregunta por allí, si contesta le voto positivo: >> >> >> https://stackoverflow.com/questions/52377179/open-a-process-and-catch-stdout-and-send-custom-keypress >> >> Y también por si alguno le ha picado la curiosidad tengo también un >> mensaje en el foro de referencia de videojuegos libres: >> >> >> https://forum.freegamedev.net/viewtopic.php?f=3&t=8113&sid=47af7f6dfc9848160f9ca27791a045f1 >> >> Saludos. >> _______________________________________________ >> Python-es mailing list >> Python-es@python.org >> https://mail.python.org/mailman/listinfo/python-es >> > > > -- > Hyperreals *R "Quarks, bits y otras criaturas infinitesimales": > https://blog.ch3m4.org > Buscador Python Hispano: http://busca.ch3m4.org > <https://blog.ch3m4.org/pages/busqueda-python-es/> > _______________________________________________ > Python-es mailing list > Python-es@python.org > https://mail.python.org/mailman/listinfo/python-es >
_______________________________________________ Python-es mailing list Python-es@python.org https://mail.python.org/mailman/listinfo/python-es